A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yedong07a 中级黑马   /  2013-5-13 15:57  /  1358 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yedong07a 于 2013-5-13 17:50 编辑

System.out.println(~6);

6的反码怎么就是-7呢?
正数的反码不是原码吗?

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

6 个回复

倒序浏览
—6是6取反后加1得到的,反过来想—6减1不就是—7咯(也就是6取反的值)
回复 使用道具 举报
楼主理解有误,java中的~6是指将6在内存中的全部二进制位取反(连最左边的符号位也要取反)。
6的二进制位是0...0110,所以~6的二进制位是1...1001,因此~6 = -7。楼主记住正数取反的值等于在前面加个-,再减一就行了。
回复 使用道具 举报
正负数 的保存方式都是2进制。
最高位是符号位,剩下的位数来表示数字,
但是现在多出了一个0,所以正负数不是一样多 (比如byte的范围-128~+127)
所以正数 与 负数 转换,需要取反+1
(byte) +1 == 0000 0001
(byte)  -1 == 1111 1111
回复 使用道具 举报
-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)
以上详解,希望能帮到你
回复 使用道具 举报
很简单嘛~

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
回复 使用道具 举报
计算机组成原理建议回头复习下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马