黑马程序员技术交流社区

标题: 计算 [打印本页]

作者: yedong07a    时间: 2013-5-13 15:57
标题: 计算
本帖最后由 yedong07a 于 2013-5-13 17:50 编辑

System.out.println(~6);

6的反码怎么就是-7呢?
正数的反码不是原码吗?
作者: 潘贵    时间: 2013-5-13 16:11
—6是6取反后加1得到的,反过来想—6减1不就是—7咯(也就是6取反的值)
作者: long    时间: 2013-5-13 16:44
楼主理解有误,java中的~6是指将6在内存中的全部二进制位取反(连最左边的符号位也要取反)。
6的二进制位是0...0110,所以~6的二进制位是1...1001,因此~6 = -7。楼主记住正数取反的值等于在前面加个-,再减一就行了。
作者: 崔宏奎    时间: 2013-5-13 16:46
正负数 的保存方式都是2进制。
最高位是符号位,剩下的位数来表示数字,
但是现在多出了一个0,所以正负数不是一样多 (比如byte的范围-128~+127)
所以正数 与 负数 转换,需要取反+1
(byte) +1 == 0000 0001
(byte)  -1 == 1111 1111
作者: 乎¤_¤乎    时间: 2013-5-13 16:46
-7
取得原码(7的二进制):      0000 0000 0000 0111
取得反码(将原码每一位取反): 1111 1111 1111 1000
取得补码(将反码加1) :          1111 1111 1111 1001
此二进制代表-7

6的二进制                  0000 0000 0000 0110
6的反码                    1111 1111 1111 1001   (就是-7)
以上详解,希望能帮到你
作者: 张旺达    时间: 2013-5-13 16:52
很简单嘛~

6的二进制是
0000 0000 0000 0000 0000 0000 0000 0110
反码是
1111 1111 1111 1111 1111 1111 1111 1001      明显这是一个负数(符号位是1),
计算机存储负数时用补码来存储的,
1111 1111 1111 1111 1111 1111 1111 1001 的补码是
1000 0000 0000 0000 0000 0000 0000 0111(负数的补码:符号位为1,其余位为该数绝对值的原码按位取反,然后整个数加1)

综上,结果显示的是-7
作者: 赵崇友    时间: 2013-5-13 18:03
计算机组成原理建议回头复习下




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