栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言】补码

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言】补码

文章目录
  • 一、补码是什么?
  • 二、使用规则
  • 参考资料


一、补码是什么?

补码的发明是为了解决负数用二进制怎么表示的问题。范围再大一点是为了解决有符号数用二进制怎么表示的问题。

二、使用规则

以8位二进制为例。

规则1:第7位为符号位,0表示正数,1表示负数。

如+3可以表示为 0000 0011,
那-3是不是可以用1000 0011表示呢?

不行!这样做最大的问题在于(+3)+(-3)!=0了。
即 0000 0011+ 1000 0011 != 0。

怎么解决呢?

规则2:正数的补码是其本身的二进制形式;负数的补码需要先将其绝对值按位取反,再 +1。

这下,
+3的补码还是0000 0011。

-3的补码则经过了如下变化
首先-3的绝对值是3,所以其绝对值表示为1000 0011(符号位不变)
然后按位取反,表示为1111 1100(符号位不变)
最后+1,得到1111 1101

这时候0000 0011 + 1111 1101=1000 0000
怎么还是不等于0?
左边的1溢出了,在一个字节单元中,结果就是0.

参考资料

1、https://fishc.com.cn/forum.php?mod=viewthread&tid=67124&extra=page%3D1%26filter%3Dtypeid%26typeid%3D571

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004748.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号