Connecting Tech Pros Worldwide Forums | Help | Site Map

signed to unsigned. How does this work?

Robert Smith
Guest
 
Posts: n/a
#1: May 23 '07
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! so why does this change the number to an unsigned
(positive) number?



Lew
Guest
 
Posts: n/a
#2: May 23 '07

re: signed to unsigned. How does this work?


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
Robert Smith
Guest
 
Posts: n/a
#3: May 26 '07

re: signed to unsigned. How does this work?


Thanks so much for explaining that

"Lew" <lew@nospam.lewscanon.comwrote in message
news:LcGdnRlLK8aWzMnbnZ2dnUVZ_vWtnZ2d@comcast.com. ..
Quote:
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
Quote:
value is
0xFFFFFFAB.
>
Because you masked out the high bits of a's promoted value on purpose, b
is
Quote:
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.
Quote:
>
0xFF is an int, and a positive one at that.
>
0xFF == 0x000000FF
>
The result of the & is 0x000000AB.
>
--
Lew

Lew
Guest
 
Posts: n/a
#4: May 26 '07

re: signed to unsigned. How does this work?


Robert Smith wrote:
Quote:
Thanks so much for explaining that
Your avoidance of top-posting in the future will be thanks aplenty.

--
Lew
Closed Thread