-4 >> 1 = -2
把-4转化为100,向右移1位,得到10,前面加上符号位1,得到结果-2,没问题
看这个: -3 >> 1 = -2
把-3转化为11,向右移1位,得到01,前面加上符号位1,得到结果-1,但是结果是-2
是我的计算方法错了吗?
把-4转化为100,向右移1位,得到10,前面加上符号位1,得到结果-2,没问题
看这个: -3 >> 1 = -2
把-3转化为11,向右移1位,得到01,前面加上符号位1,得到结果-1,但是结果是-2
是我的计算方法错了吗?
先把那个数转换成补码表示,然后再移位.
为了简单起见,以byte为例进行说明
-4: 1111,1100 (补码) 右移 1111,1110(引进一个1),再各位取反加1,0000,0010,即-2;
-3: 1111,1101 (补码) 右移 1111,1110,同样,得到-2;
其它类型的原理相同啊.
先转化成补码表示啊.
-4 => FFFFFFFC
右移1位,得到 FFFFFFFE => -2-3 => FFFFFFFD => 11111111111111111111111111111101
右移一位,得到 11111111111111111111111111111110 => FFFFFFFE => -2
-3转化为:0000 0011->取反1111 1100->再加1->1111 1101
-4:0000 0100->1111 1011->加1->1111 1100