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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨勇 中级黑马   /  2014-4-21 13:49  /  1056 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨勇 于 2014-4-22 17:47 编辑

9在内存中表示为:
0000 0000 0000 0000 0000 0000 0000 1001
~9的结果就应该是:
1111 1111 1111 1111 1111 1111 1111 0110
为什么上面二进制代码的结果为-10哦?实在不明白...

评分

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

查看全部评分

2 个回复

倒序浏览
本帖最后由 1722413885 于 2014-4-21 15:18 编辑

正数在内存中用原码表示,负数用补码表示 ,-9的原码是:1000 0000 0000 0000 0000 0000 0000 1001 要把原码转成补码,规则是符号位不变,其余位取反,末位加1;-9的补码:1111 1111 1111 1111 1111 1111 1111 0111.  -10的原码是:1000 0000 0000 0000 0000 0000 0000 1010 转成补码:1111 1111 1111 1111 1111 1111 1111 0110

评分

参与人数 1黑马币 +2 收起 理由
jing迪 + 2

查看全部评分

回复 使用道具 举报
因为补码的关系。现在计算机都是认补码的。


而源码在正数上和补码一致。按照2进制算就可以了。
补码的话,是第一位为1表示为负数,之后的位数都取反,然后+1,再按二进制计算。
  1. 1111 1111 1111 1111 1111 1111 1111 0110
  2. 1000 0000 0000 0000 0000 0000 0000 1001 +1
  3. 1000 0000 0000 0000 0000 0000 0001 0000 就成10了
复制代码

补充下:
原码,反码,补码,正数全部一样
负数,全部是第一个为1的时候是负数。

原码,第一个为1后面的都不变。
反码,第一个为1后面的全取反。
补码,第一个为1后面的全取反+1

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马