原码、反码和补码

🔥 本文由 程序喵正在路上 原创,CSDN首发!
💖 系列专栏:计算机组成原理
🌠 首发时间:2022年9月10日
🦋 欢迎关注🖱点赞👍收藏🌟留言🐾
🌟 一以贯之的努力 不得懈怠的人生

引入

在计算机里面,都是以 补码 的形式来存储数据的

那么可能就会有小伙伴会问,那我们学习补码就行了,为什么还要学习原码和反码呢?

举个栗子,我们本来只会中文,但为了去阅读英文书籍学习英文,一种方法就是将英文书籍翻译成中文再来阅读,如果我们不会中文也就无法去学会英文

同样地,原码和反码也是学会补码的前提

原码

众所周知,一个字节就是 8 个位

直接讲概念可能不太好理解,下面我们以一个字节为例来说原码

最高位为符号位,0 代表正数,1 代表负数,后面的非符号位为该数字绝对值的二进制形式

以一个字节为例,那它的最高位,也就是第 7 位,如果是 0,表示这个数值位正数;如果是 1,表示这个数值为负数

来看一个具体的例子,5-5 两个数的原码分别为:0000 01011000 0101

反码

学会了原码之后,反码就变得很简单了

反码的规则是

正数的反码和原码一致;负数的反码是对原码按位取反,只是最高位(符号位)不变

我们还是来看 5-5 这个例子:

5 是正数,反码和原码一样,为 0000 0101

-5 是负数,最高位不变,依旧为 1,其他位取反,为 1111 1010

补码

最后我们来看补码

补码的规则是

正数的补码与原码一致;负数的补码是该数的反码加 1

我们还是来看 5-5 这个例子:

5 是正数,补码和原码一样,为 0000 0101

-5 是负数,其反码为 1111 1010,再加上 0000 0001,为 1111 1011

为什么用补码来存储数据

既然有原码、反码和补码,那为什么我们在计算机中要用补码来存储数据呢?

我们还是以 5-5 这个例子来看

学过计算机基础的小伙伴应该都知道,CPU 里面有加法器,什么是加法器啊?

就是里面会进行加法的运算

那么 CPU 里面有没有减法器啊?

其实,是没有减法器的,那计算机怎么进行减法呢?

比如,5 - 5 这个算式,我们可以将它转变为 5 + (-5),我们试着用原码来进行这个算式的计算

0000 0101
1000 0101
相加得到
1000 1010

根据我们刚刚学到的知识,来看一个这个计算结果,最高位为 1,表示这个数值是个负数,后 7 位表示的值为 10,即结果为 -10,这显然不对

接下来我们用反码来进行计算

0000 0101
1111 1010
相加得到
1111 1111

1111 1111 转变为原码,是 1000 0000,也就是 -0,有的小伙伴说那这样不就对了

但是你想一想,0000 0000 也表示 0,那我们这不就矛盾了,两个不一样的二进制数的值是一样的,所以用反码来表示也不行

最后,我们来试试补码

0000 0101
1111 1011
相加得到
1 0000 0000

因为一个字节只有 8 位,所以得把最高位的 1 去掉,也就是 0000 0000,符合我们的数学逻辑

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序喵正在路上

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值