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.

Reply via email to