计算机组成原理|原码、反码和补码

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

阅读指南
  • 引入
  • 原码
  • 反码
  • 补码
  • 为什么用补码来存储数据

引入 在计算机里面,都是以 补码 的形式来存储数据的
那么可能就会有小伙伴会问,那我们学习补码就行了,为什么还要学习原码和反码呢?
举个栗子,我们本来只会中文,但为了去阅读英文书籍学习英文,一种方法就是将英文书籍翻译成中文再来阅读,如果我们不会中文也就无法去学会英文
同样地,原码和反码也是学会补码的前提
原码 众所周知,一个字节就是 8 个位
直接讲概念可能不太好理解,下面我们以一个字节为例来说原码
最高位为符号位,0 代表正数,1 代表负数,后面的非符号位为该数字绝对值的二进制形式
以一个字节为例,那它的最高位,也就是第 7 位,如果是 0,表示这个数值位正数;如果是 1,表示这个数值为负数
来看一个具体的例子,5 和 -5 两个数的原码分别为:0000 0101 和 1000 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,符合我们的数学逻辑

    推荐阅读