c语言位运算-3>>2,为什么是-1

2024-11-29 10:39:05
推荐回答(2个)
回答1:

-3的二进制表示为 1000 0011 符号位向右移动后,正数的话补0,负数补1,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.

回答2:

好吧,我也没弄明白
所以刚刚用VC写了段代码调试一下发现了一个原因
先贴代码
signed int* a = (int *)-3;
signed int* b;

b = (int *)((int)a >> 2);

特意用的显示声明
调试的时候 a的值为 0xfffffffd(低四位是1101)
右移两位的话 b值为 0xffffffff
那么就说明 右移的时候 高位被自动补为 1(我一直以为是补0)

只有这样解释才能说明问题了
望采纳