计算机硬件并不知道补码的存在
对于计算机硬件来说,10101010这一串二进制串只是一串可以进行加法运算的二进制串而已,cpu与内存在进行计算与存储时并不会区分这是原码还是反码或者是补码。
位模式:固定宽度的二进制序列
cpu的功能就是进行加法运算,cpu只知道0+1=1,1+1=10,从存储器上读取到一系列的01串递给cpu后,cpu就会按位进行相加,然后把结果送回存储器,至于你给他的是原码还是反码还是补码,cpu一概不管,只要你敢给,他就敢加,但是cpu跟人一样,一次能够处理数据的量是有上限的,因此每次只能给cpu固定长度的数据,数据宽度太长,cpu消化不了,这种固定长度的二进制数据就叫位模式,这里一定要注意一下,cpu能够处理的最小数据宽度是8位,给7位或者6位cpu都处理不了哦。
那原码、反码、补码是给谁看的?
cpu对所有位模式一视同仁,对于10000010这个二进制串,cpu就认为他就只是10000010,但是如果按原码定义进行解释的话,10000010代表的是-2,按反码进行解释的话10000010代表的是-125,按补码进行解释的话10000010代表的是-126。为了方便人类对数据进行人为理解与处理,我们把从计算机存储器读取到的二进制串按补码的定义进行解释,存储数据时也按补码的定义把十进制数据翻译成补码形式的二进制串,再存储到计算机。
那我们在定义变量时赋值给变量的十进制数是从什么时候转换成二进制补码形式,最终存储到计算机中的呢?以及从计算机中读取的普通二进制01串从什么时候以补码形式呈现给我们的呢?
从十进制到二进制补码的转换过程
1、在cpp源代码中声明变量a并存储-5,int a=-5;
2、编译器在对源代码编译时会把-5转换成二进制补码形式
3、最终存储把转换后的补码存储到了计算机内存
从计算机内存读取的二进制串到十进制的转换
1、从计算机中读取原始的二进制01串
2、当遇到cout输出函数时,在cout函数内部,把读取到的01二进制串当作补码处理,最终转换成十进制进行输出,注意cout函数是人类写的哦



评论