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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fxing 中级黑马   /  2015-2-15 19:39  /  1370 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

二进制取反加一就是负数,谁能在本质上说清楚,感觉不好理解啊

2 个回复

倒序浏览
二进制取反加1是该二进制对应的补码,谁说是负数的。你要明白:任何数据都是以补码的形式存储在计算机里面的。因为这样便于计算。例如:5-3的计算,就是5+(-3),在计算机计算的时候就是5与-3的补码在进行加法运算,5的补码就是0000 0101,-3的补码就是1111 1101,所以相加等于1 0000 0010,第一个1是溢出位舍去就得到0000 0010,这个就是得到的结果的补码,并且在计算机存储的结果,当一个应用程序读取这个结果显示的时候,就把这个补码读取得到它对应的原码数值就是了。所以一切的本质就是计算机存储计算是基于补码的结果!
回复 使用道具 举报
【wkz_crystal分析:】
其实很简单:
我们以这个6为例分析吧:
6的二进制是:0000-0000 ……0000-0110    ( 这个数字就是:6 )
取反就是:      1111-1111…… 1111-1001   (这就是6取反,表现形式就是:~6)
加1就是(+) 0000-0000…… 0000-0001
加一的结果是:1111-1111……1111-1010    (这就是~6+1的值)那么这个数字是多少呢?
简单让它加6: 0000-0000…… 0000-0110
结果就是:       0000-0000…… 0000-0000   (就是~6+1+6的值,简单了吧,这就是0嘛!)
【综上所述】:~6+1+6=0,那么……~6+1=0-6=-6,就是意味着:6取反加1等于-6,OK了吧!
【总结】任何数取反加一都是等于这个数字的负数!!

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