java - Storing unsigned long value in two 16bit register -
i want store unsigned long value in 2 16bit register.for example if have long value (-2,147,483,648 2,147,483,647) i'm using formula like:
v[0] = myvalue % 65536 v[1] = myvalue / 65536 to value register
outval = reg0 + (reg1 * 65536) but how unsigned long value range 0 4,294,967,295?
as commenter harold pointed out already, formula doesn't work correctly negative numbers.
you should bitwise instead of using math avoid surprises (and speed things in case compiler didn't optimize already).
splitting:
v[0] = myvalue & 0xffff v[1] = myvalue >> 16 // implicitly cuts off lower 16 bits // shifting them away nirvana joining:
outval = reg0 | (reg1 << 16) this applies both signed , unsigned (provided variables have same "sign type").
legend, in case language (which didn't specify) uses different operators:
& bitwise and, | bitwise or, << , >> bitwise shifting left/right (shl/shr), 0x marks hexadecimal literal (you use 65536 instead of 0xffff, think hex literal makes clearer magic number comes from).
Comments
Post a Comment