在计算机中,1byte=8位,若是无符号的情况下可表示的数字总个数为2^8=256个数,但是计算机只会进行加法运算例如:
5-4 =1 在计算机中的运算方式是 5+(-4)=1,故在计算机中要加入负数的概念,以方便加减法运算。
二进制的字符串中区分正负数,做了以下规定:最高位作为符号位 0表示正数 1表示负数
正数范围(补码) 0000 0000~0111 1111 0~127
负数范围(补码) 1000 0000~1111 1111 -128~-1
共256个数(至于为什么是补码,后面会详细解释)
接下来介绍下 原码,反码,补码。为了能准确表达,以下规定正数的反码,补码都等于原码;负数的补码等于把反码加1
例如:
83 ~ 原码 反码 补码 0 101 0011
83……1
41……1
20……0
10……0
5……1
2……0
1……1
-83 ~原码1 101 0011
83……1 ~反码1 010 1100
41……1 ~补码1 010 1101
20……0
10……0
5……1
2……0
1……1
根据补码求真值:
为什么计算机中要以补码方式表示数值?解释如下:
首先要了解下什么是计数系统
一个计数系统可以存多少容量状态的数,我叫它作为计数系统的Mod。一个计数系统不断地加一,那么它表示的数的状态也会周期性地变化,我叫这个周期的大小叫做Mod。
举个例子:一个时钟显示十二个小时,时针旋转一周后回到原来的状态,即该系统的Mod为12。只要时针转360度(也就是12小时),就会和现在所在的数值一样。
由此,可以得到一个结论。这种周期性变化的计数系统,一个状态加减整数倍的Mod,其状态不会有不会发生变化。
计算机能进行的运算只有加法故需:变减为加
在计算机中使用加法器对数据进行计算,那么如何进行减法的运算呢?
设Mod=32
若a=3,b=-4,则a+b=a+b+Mod=-1+Mod=a+(Mod-4)=31(在计数系统中-1和31等价)
实际上Mod-4就是b的补数,所有的减法在计算机中都可以转化为加上减数的补数,对应计算机上的概念就是补码。
因此,计算机是使用补码(补数)进行计算。