鱼C论坛

 找回密码
 立即注册
查看: 2040|回复: 4

关于二进制的补码,看了甲鱼哥的那篇关于补码的还是不是很懂

[复制链接]
发表于 2018-9-18 10:27:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
首先,假设我  128-128=0  那么就等于 128+(-128)=0
现在用二进制来表示这2个数。
128是:1000,0000;

-128是,我看说是取反:(符号位不动,其他位取反就是负数):1111,1111;
那这样2个数加起来就是——:    1,0111,1111   
因为是只有8个位的,所以第9位的1被吃掉了,就是剩下0111,1111   其中0是符号位表示的是正,那这个数就是 +127??
显然这个数是错误的……
可是那错误为什么要有“反码”这个说法呢??

另外,如果是 “补码” 的话,就对的。
-128的补码是,反码+1 那就是 1111,1111+1=1,0000,0000。
128+(-128)=1000,0000+1,0000,0000=1,1000,0000。去掉第9位,就是1000,0000。
其中1000,0000的1表示符号位 。那么这个结果就是(-0)??
这样我感觉也有点奇怪,是不是我哪里有问题??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-18 12:15:29 From FishC Mobile | 显示全部楼层
1000,0000 这是 128, -128,前面多加一个 1
1,1000,0000
1,0111,1111    取反
                    1   把溢出加回来
   1000,0000    二进制的正负 128 都是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-18 13:05:02 | 显示全部楼层
claws0n 发表于 2018-9-18 12:15
1000,0000 这是 128, -128,前面多加一个 1
1,1000,0000
1,0111,1111    取反

一般用补码方式表示,举例说明:
-52,假设存储的数据是8位二进制数,即8位二进制补码
先将52转换成二进制数:00110100B
取反:11001011B
加1:11001100B
则-52D的8位二进制补码为11001100B
如果已知11001100B是有符号数,因为最高位是1,则这个码是用补码表示的一个负数
11001100B减1=11001011B
取反=00110100B=52D
则可知:11001100B是-52D的补码表示

刚刚在网上找的。好像他没在最前面+1。(就是大哥你所说的1,1000,000)
我也明白我是哪里有错了,我是太纠结于符号位了,其实不管如何,直接取反再+1既可,不用考虑符号位_(:з」∠)_
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-18 13:35:00 From FishC Mobile | 显示全部楼层
彭尼玛 发表于 2018-9-18 13:05
一般用补码方式表示,举例说明:
-52,假设存储的数据是8位二进制数,即8位二进制补码
先将52转换成二 ...

52 小于 64,小于128,位置够用,不需要另外加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-18 14:09:31 | 显示全部楼层
claws0n 发表于 2018-9-18 13:35
52 小于 64,小于128,位置够用,不需要另外加

恩恩_(:з」∠)_我试着128不加,好像也一样活的一样的答案_(:з」∠)_因为都会越界归0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 17:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表