前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么是计算机补码_二进制原码反码补码

什么是计算机补码_二进制原码反码补码

作者头像
全栈程序员站长
发布2022-11-01 10:17:11
4940
发布2022-11-01 10:17:11
举报
文章被收录于专栏:全栈程序员必看

计算机中数字都是用二进制来表示的,有三种编码方式:原码、反码、补码,而计算中用到最多的就是补码,原因是什么呢?让我们来看一下这三种方式的具体表示吧

原码

原码的表达很简单,最高位为符号位,0表示正数,1表示负数。其它位即为绝对值的二进制表示,非常直观。但是使用原码存在哪些问题呢?

0的表示存在二义性

如果按照上述的表示方式,那么0就可以分为+0和-0两种表示。即以8位字长来说 +0的原码为00000000,-0的原码为10000000,这两种表示都对应0,这样在计算机判断0时就会带来一些麻烦。

进行运算时符号需单独处理

例如要计算一个 8 + (-5),就要先计算最后的结果的符号,那么需要比较两个数的绝对值,在根据两个数的符号来确定。

反码

反码只是原码与补码的一个中间结果,它并没有什么实际用途。负数的反码为在原码的基础上,除符号位均取反。例如-8的原码为10001000,而反码则为111101111

补码

补码是有反码+1得到的,那么这个补码有什么神奇的地方呢?我们先要考虑一个概念:取模运算。一般来说,取模称之为mod,在java中 用%号来表示。例如 5 %2 = 1。

现在有一个问题,一周中星期四的前三天是星期几?我们可以把一周7天用1-7来表示,那么星期四的前三天可以表示为 4 -3 = 1 ,那么星期四之后四天还是星期一,那么我们可以表示成 4+4 = 1,为什么有4+4 = 1,因为4+4 = 8,大于7之后又是一个新的循环,所以实际上应该写成 (4+4)%7 = 1,所以可以看到-3和4 是补数。

所以可以看出,补码可以简化加减法运算,而符号位也可以直接参与运算,不必单独计算符号位。而至于0的表示则只有00000000一种,自然这种编码方式是最优解了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179443.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档