黑马程序员技术交流社区
标题:
补码
[打印本页]
作者:
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