What I'm not understanding is why that's not the case in this example. It's a 32 bit bitwise operation on a 32 bit signed type. Shouldn't 0xFFFFFFFF be coerced to a value of -1?
On Tue, Jun 14, 2016 at 1:23 PM, Jan Mercl <0xj...@gmail.com> wrote: > All binary operators, except shifts, require identical left and right > types. Untyped values will be coerced to the type of the other side, if > representable as such after the conversion. That's not the case in this > example. > > On Tue, Jun 14, 2016, 19:16 Dave MacFarlane <driu...@gmail.com> wrote: > >> Is this supposed to be legal in Go: >> >> var x int32 = 3 >> >> fmt.Printf("%d", x & 0xFFFFFFFF)? >> >> The language spec just says the bitwise operator "applies to integers >> only" and >> "yields a result of the same type as the first operand" that I can see, >> but it's giving >> me a compiler error: >> >> ./main.go:10: constant 4294967295 overflows int32 >> >> with go 1.6.2. >> >> Is this a compiler bug, or am I missing something else in the spec that >> makes it impossible >> to mask out the high bit in a signed integer type without converting to >> an unsigned equivalent first? >> >> - Dave >> >> -- >> 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. >> > -- > > -j > -- - Dave -- 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.