负数二进制转换 位移运算问题

负数二进制数怎么转换成十进制?如:1 1111100 = — 4,这是怎么转的?求方法

- 20 >> 3 结果是 - 3,为什么?

似乎是 取反加一 也就是说要求负数,就是 用对应正数,取反+1
4 0000 0100 取反 1111 1011 +1后 1111 1100
3 0000 0011 取反 1111 1100 +1后 1111 1101
这种方法叫求补运算。负数转正数,也是进行取反+1 的求补运算
负数二进制转十进制, 是对这个负数二进制进行求补运算,得到对应的正数,前面加个负号就得到对应的十进制了吧
20 0001 0100 进行求补运算 取反1110 1011 +1后 1110 1100 这就是-20的二进制
-20>>3 算术右移3位 1111 1101 变成这个 也就是-3 对应的二进制了
因为是负数,左边第一位是1,所以算术右移3位相当于左边加 3个 1, 右边再减去3位 。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-13
计算机中的数据一般是以补码的形式保存的, - 4的补码为11111100
- 20的补码为 11101100 , 算术右移3位后,高位补3个1,低3位移出,结果为:11111101 ,这是 - 3的补码。
求补码的方法:
正数的补码表示和原码表示一样;负数的补码表示是原码表示的符号位不变,数值位逐位取反后最低位加1。
例:+4[原]=00000100 +4[补]=00000100 (8位二进制数)
-4[原]=10000100 -4[补]=11111100追问

谢谢!

相似回答