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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qiubaoyang 中级黑马   /  2014-4-12 00:38  /  1258 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 qiubaoyang 于 2014-4-13 17:33 编辑

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

4 个回复

倒序浏览
是6还是负6 ~是什么意思
回复 使用道具 举报
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

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
这其实就是一个二进制的运算问题
~这个运算符表示按位非,也即是先把10进制换成二进制,然后把二进制的每一位都进行取反运算。
6的二进制是110,内存中都是按字节存储的,一个字节8个bit位,110不足8位,前面要补5个0,就变成了00000110,所以~6的二进制就是对每个二进制位进行取反得到11111001,最高位符号位不变,求得它的补码10000111,也即是-7

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报 1 0
清风夜独醉 发表于 2014-4-12 04:16
这其实就是一个二进制的运算问题
~这个运算符表示按位非,也即是先把10进制换成二进制,然后把二进制的每一 ...

说的太好了,赞一个。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马