Robert Smith wrote:
Quote:
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.
Quote:
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