Why does (-1 >> 1)
result in -1
? I'm working in C, though I don't think that should matter.
I can not figure out what I'm missing...
Here is an example of a C program that does the calc:
#include <stdio.h>
int main()
{
int num1 = -1;
int num2 = (num1 >> 1);
printf( "num1=%d", num1 );
printf( "\nnum2=%d", num2 );
return 0;
}
Because signed integers are represented in two's complement notation.
-1
will be 11111111
(if it was an 8 bit number).
-1 >> 1
evidently sign extends so that it remains 11111111
. This behaviour depends on the compiler, but for Microsoft, when shifting a signed number right (>>
) the sign bit is copied, while shifting an unsigned number right causes a 0
to be put in the leftmost bit.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With