黑马程序员技术交流社区

标题: 二进制问题 [打印本页]

作者: fxing    时间: 2015-2-15 19:39
标题: 二进制问题
二进制取反加一就是负数,谁能在本质上说清楚,感觉不好理解啊

作者: xyf19881010    时间: 2015-2-16 14:04
二进制取反加1是该二进制对应的补码,谁说是负数的。你要明白:任何数据都是以补码的形式存储在计算机里面的。因为这样便于计算。例如:5-3的计算,就是5+(-3),在计算机计算的时候就是5与-3的补码在进行加法运算,5的补码就是0000 0101,-3的补码就是1111 1101,所以相加等于1 0000 0010,第一个1是溢出位舍去就得到0000 0010,这个就是得到的结果的补码,并且在计算机存储的结果,当一个应用程序读取这个结果显示的时候,就把这个补码读取得到它对应的原码数值就是了。所以一切的本质就是计算机存储计算是基于补码的结果!
作者: wkz_crystal    时间: 2015-3-21 20:39
【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了吧!
【总结】任何数取反加一都是等于这个数字的负数!!






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