Consider coercing them to int64, multiply, then shift and coerce back to Int26_6. I suspect that would be faster than splitting with shifts and ANDs, two int32 multiplies, shift and add.
On Tue, Jun 14, 2016, 11:42 Dave MacFarlane <driu...@gmail.com> wrote: > I'm not actually trying to do x & -1, that would be pointless, as you say. > It was just > the easiest way to demonstrate the behaviour that I didn't understand in a > minimal > way. I understand the problem now--I was thinking of 0x as a prefix > representing a bitmask > when used as a constant with a bitwise operation, while Go thinks of it as > a prefix > representing a hexadecimal number even in that context. > > What I *really* want to do is multiply 2 x/image/math/fixed.Int26_6 > variables. I don't > want to lose the precision that x*y >> 6 would unnecessarily as x or y get > large, so I wanted > to extract the first 26 bits, multiply them, and then separately multiply > the decimal portion and add > it back shifted into the correct location. > > (Int26_6 is defined as `type Int26_6 int32`) > > On Tue, Jun 14, 2016 at 2:16 PM, Ian Lance Taylor <i...@golang.org> wrote: > >> On Tue, Jun 14, 2016 at 10:44 AM, Dave MacFarlane <driu...@gmail.com> >> wrote: >> > 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? >> >> Why don't you just write -1? >> >> I don't actually understand what you are doing. Given an int32 value >> x, x & 0xFFFFFFF (assuming that were valid) is always simply x. What >> else could it be? If you want to mask out the sign bit you should >> write x & 0x7FFFFFFF. >> >> Ian >> >> >> > 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. >> > > > > -- > - 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. > -- 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.