Both statements are true for both signed and unsigned integers. On Mon, Jul 24, 2017, 04:11 Pablo Rozas Larraondo < p.rozas.larrao...@gmail.com> wrote:
> 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. > -- 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.