黑马程序员技术交流社区

标题: 补码 [打印本页]

作者: qiubaoyang    时间: 2014-4-12 00:38
标题: 补码
本帖最后由 qiubaoyang 于 2014-4-13 17:33 编辑

在java中~6的补码为什么是-7?
最好是有内存图。

作者: caijunsong    时间: 2014-4-12 00:48
是6还是负6 ~是什么意思
作者: skyfly    时间: 2014-4-12 03:53
6的二进制是
0000 0000 0000 0000 0000 0000 0000 0110
反码
1111 1111 1111 1111 1111 1111 1111 1001
即二补码的-7

java整型是32bit运算
内存上“反码值”在最后在System.out.print等格式化输出时仍按“补码”解析成-7。
即刚刚的反码看成补码
[1][111 1111 1111 1111 1111 1111 1111 1001]
除符号位外的值部分反码
000 0000 0000 0000 0000 0000 0000 0110   即(6)10
根据补码计算方法,加1得 7,
加符号位,得-7
作者: 清风夜独醉    时间: 2014-4-12 04:16
这其实就是一个二进制的运算问题
~这个运算符表示按位非,也即是先把10进制换成二进制,然后把二进制的每一位都进行取反运算。
6的二进制是110,内存中都是按字节存储的,一个字节8个bit位,110不足8位,前面要补5个0,就变成了00000110,所以~6的二进制就是对每个二进制位进行取反得到11111001,最高位符号位不变,求得它的补码10000111,也即是-7
作者: qiubaoyang    时间: 2014-4-13 17:33
清风夜独醉 发表于 2014-4-12 04:16
这其实就是一个二进制的运算问题
~这个运算符表示按位非,也即是先把10进制换成二进制,然后把二进制的每一 ...

说的太好了,赞一个。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2