关于补码的一点思考

机器数:一个数在机器中的二进制表示模式(带符号位)一般是补码

真值:机器数表示的实际数(符号位01转换为+-)

原码:就是符号加绝对值表示法

反码:正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反

补码:正数的补码是其本身,负数的补码是其反码+1

一个计数系统可以存多少容量状态的数,我叫它作为计数系统的Mod。一个计数系统不断地加一,那么它表示的数的状态也会周期性地变化,我叫这个周期的大小叫做Mod。----------来自EmilKwan 的blog

补码的好处:可以变减为加(这个思想类似于钟表转一圈12h,逆时针转x相当于顺时针转12-x),使得硬件设计中不再需要减法器。比如,a=3,b=4,a-b=a-b+mod=a+(mod-b),而这个mod-b其实就是将b按位取反再加1,注意不是b的补码,因为正数的补码是其本身,假定mod=2^4,则b就是0100,10000-0100=1+1111-0100,all_bits减去某个二进制数相当于这个数的0变为1,1变为0.

任意一个数按位取反再+1两次后为原来的数, 图中任意一个数按位取反+1得到它的相反数,除非图上没有它的相反数,即0和-8,这两个数按位取反+1为它本身。

注意看从-8到7,实际数从小到大,二进制补码同样从小到大(0000>1111,因为1111+1=0000),这大概和符号位参与运算有关。假若不溢出的话,从图上可以看出正+正,正+负(如3+(-2)=3+(16-2)%16=1),负+负都是正确的。

参考:https://www.cnblogs.com/guanjianzhuo/p/6017291.html

猜你喜欢

转载自blog.csdn.net/Wen_Yongqi/article/details/83450877