Robert Smith wrote:
Why/How does this work?
I know that if I want to convert a signed byte (ie 0x7F) to unsigned
number I can promote it to an integer, like this:
byte a = (byte)0xAB; // -85
int b = a & 0xFF; // 171
The bit pattern is 10101011 (0xAB)
If I AND it with 11111111 (0xFF)
The result is 10101011
ie. the same number!
It is not the same number. You left out all the high bits where the
difference is apparent.
a is a byte, b is an int.
a promotes to int in order to participate in the mask operation; the promoted
value is
0xFFFFFFAB.
Because you masked out the high bits of a's promoted value on purpose, b is
0x000000AB.
Quite different.
so why does this change the number to an unsigned (positive) number?
Because you masked out all the high bits, including the sign bit, on purpose.
0xFF is an int, and a positive one at that.
0xFF == 0x000000FF
The result of the & is 0x000000AB.
--
Lew