如果讲时钟的指针从6拨到2,可以两种操作方式。
这两种方式是等价的,按照逆时针为负顺时针为正的话,在时钟拨动的案例中,+8 是-4以 12 为模的补数。
模的概念:
【举例】 6+13=19三7(mod 12)
在该8位寄存器中,能表示的无符号定点数最大数值为
,最小值为0。当超过最大值的时候就会舍弃模数(向前再进一位),而后这8位都从0开始。
补数的特点:
对特点1来说,前面时钟的案例中[-4]的补数=12+(-4)=+8,同样的[-9]的补数为12+[-9]=+3
对特点2来说,|+8|+|-4|=12,|-9|+|3|=12
寻找一个负数的整补数的意义何在呢?
这样在计算机内部就可以使用加法器来实现减法运算,而不必专门设置减法器,因而降低了硬件的复杂度和成本。
最后因为16超过模数范围自动舍弃模数即16-12得到最终结果4。
将补数的概念应用到计算机内部,便出现了补码这种机器码(机器数)。
定点整数的补码定义:
假设真值x为定点整数,n为x的补码表示中数值位的位数(比特数量),加上1个符号位,x的补码表示共有n+1位,最低位的位权值为
,而最高位(符号位)的位权值为
,因此最高位进位的位权值为
,即模数为
。
0在补码和原码表示时候的区别:
可以看出正数的原码与补码相同,而负数的原码和补码是不同的。
0在原码中有两种表示形式,但是在补码中只有一种表示形式,因此补码可以比原码多表示一个数。
定点小数的补码定义:
假设真值x为定点小数(纯小数),小数点左侧的位为最高位(符号位),其位权值为
,而最高位进位的位权值为
,即模数为
=2。
现代计算机中多采用IEEE754标准表示浮点数,而其中的定点小数采用原码表示,因此通常不会涉及定点小数的补码表示。
相关参考:https://www.cnblogs.com/kevinq/p/4480563.html
补码优缺点:
优点:
目前计算机中普遍采用补码表示有符号定点整数,例如C语言中char、short、int、long型整数 都是采用补码进行表示的。
缺点: