原码、反码、补码

原码、反码、补码

标签(空格分隔): C语言


一个数在计算机中式以二进制的形式存在。通常我们称为机器数机器数是有符号的,在计算机中最高位存放符号位。其中正数的符号位为0,负数的符号位为1

原码:符号位加上其余位的真值的绝对值

这里以字长位 8 位的机器为例

例如:3的原码就是 0000 0011 
     -3的原码就是 1000 0011

反码:对于正数而言,反码就是原码,对于负数而言,反码是除号位之外,其余各位取反

例如:3的反码是:0000 0011
     -3的反码是:1111 1100

由于计算机在用原码参与计算时需要考虑到符号位,效率比较低下,因此在计算机中,负数通常是以补码的形式存放在内存中的。
补码:对于正数而言,原码,反码,补码,是一致的,对于负数而言,补码等于反码加一

例如:3的补码是:0000 0011
    -3的补码是:1111 1101

计算 3-3

0000 0011  + 1111 0100 = 0000 0000 =0

计算 5-7

0000 0101 + 1111 1001 = 1111 1110------> -2的补码

思考:不知道大家想过这个问题没有?为什么对于字长为8位的数值类型存储范围为什么是 -128到127呢?

答:在计算机中的数值是以补码的形式存放的,因为使用原码和反码存放时会出现一个1000 0000 我们叫负零,我们认为负零这个数多余的,我们想让0的表示是唯一的。而补码正好解决了这个问题,当-127的补码和-1的补码相加时得到的补码正好是在原码表示下的负零,于是我们将这个数值成为-128扩充了一位。这样解决了,计算的效率问题,也解决了零编码的唯一性问题,还增加了数值存储的范围。

补码如何转成原码

符号位不动,其他位求反,最后整个数加一,得到原码

-2的补码是:1111 1110
原码是:1000 0010;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可...
    yang2yang阅读 6,978评论 1 13
  • 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的...
    点赞狂魔刀锋君已放弃治疗阅读 4,408评论 0 4
  • 本文转载自原码, 反码, 补码 详解 本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反...
    骑摩托马斯阅读 5,186评论 0 2
  • 尊敬的各位长辈、亲爱的的哥哥姐姐弟弟妹妹: 大家中午好! 今天是我12岁生日,爸爸妈妈为我张罗如此大的生...
    王敏11阅读 2,915评论 0 0
  • 少林梵音壮 梵音,指佛的声音,佛的声音有五种清净相,即正直、和雅、清彻、清满、周遍远闻,为佛三十二相之...
    百灵清唱阅读 5,377评论 0 1

友情链接更多精彩内容