Thanks Bakul, I think I have a better understanding of what's going on after reading your response.
Is it correct to say that the Go compiler treats the prepended minus sign differently depending on the variable being a signed or an unsigned integer? By looking at this example: https://play.golang.org/p/feqQsuPkqk It seems to me that in the case of an unsigned integer it's treated as a bitwise operation : -x == ^x + 1 But for signed integers -x == -1 * x Cheers, Pablo On Mon, Jul 24, 2017 at 5:36 AM, Bakul Shah <ba...@bitblocks.com> wrote: > This is a standard trick to find the least significant set bit in a word. > Only works for 2's complement numbers! > -x == ~x+1 > For example: x = 00110000b (24), ~x+1 = 11001111+1 = 11010000. Adding them > yields 00010000; thus only the least significant set bit remains set. > > Note that func LSB(x uint64) uint64 { return x&-x } works too. In your > example you get an error because in Go literal constants are untyped. It is > a pragmatic decision -- see https://blog.golang.org/constants > > On Jul 23, 2017, at 5:50 AM, Pablo Rozas Larraondo < > p.rozas.larrao...@gmail.com> wrote: > > I have seen Go code using this function to find out the least significant > byte of unsigned integers: > > func LSB(ci uint64) uint64 { return uint64(ci) & -uint64(ci) } > > This function works fine but I wonder why, if call the same AND operation, > it results in an error: "constant -X overflows uint64" > > Here is a playground example to illustrate this: > https://play.golang.org/p/_0EYtlLnmG > > Does anyone know what changes when -uint64() is called in a return > statement? How a negative uint should be interpreted? > > Thank you, > Pablo > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.