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.

Reply via email to