Re: signed to unsigned. How does this work?



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
.



Relevant Pages

  • [RFC: 2.6 patch] remove the broken SCSI_ACORNSCSI_3 driver
    ... * Abandoned using the Select and Transfer command since there were ... Once debugged, remove the #undef, otherwise to debug, ... -unsigned int dmac_address ... * Purpose: differentiate between commands that have a DATA IN phase ...
    (Linux-Kernel)
  • Re: I want to see dead people
    ... > Certainly Solaris has improved mightily with the inclusion of many of the ... MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ... typedef struct cache_node { ... int print_user; ...
    (comp.unix.solaris)
  • Re: manipulation and memory allocation
    ... > is it in principle a good or bad idea to allocate/deallocate memory ... functions usage, which are not evident from the prototype. ... What purpose, if any, ... it has something to do with the size of an int get it from the ...
    (comp.lang.c)
  • Re: Standard integer types vs types
    ... unsigned char is useful for representing the values of individual ... and also int "has the natural size suggested by the ... the idea of long being general purpose has somewhat been ... Note that this is an opinion that seems to be almost unique to Malcolm. ...
    (comp.lang.c)
  • Re: Need help understanding program control/flow.
    ... "if" is not a loop construct. ... int display_instructions; ... void display_report; ... Purpose: This function gets the data from the user. ...
    (comp.lang.c)