Re: signed to unsigned. How does this work?
- From: Lew <lew@xxxxxxxxxxxxxxxxxxxx>
- Date: Wed, 23 May 2007 10:34:50 -0400
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
.
- Follow-Ups:
- Re: signed to unsigned. How does this work?
- From: Robert Smith
- Re: signed to unsigned. How does this work?
- References:
- signed to unsigned. How does this work?
- From: Robert Smith
- signed to unsigned. How does this work?
- Prev by Date: signed to unsigned. How does this work?
- Next by Date: DateFormat.parse issues
- Previous by thread: signed to unsigned. How does this work?
- Next by thread: Re: signed to unsigned. How does this work?
- Index(es):
Relevant Pages
|
|