补码:假设当前时针指向8点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨2小时,即8-2=6;另一种是顺拨10小时,8+10=12+6=6,即8-2=8+10=8+12-2(mod 12).在12为模的系统里,加10和减2效果是一样的,因此凡是减2运算,都可以用加10来代替。若用一般公式可表示为:a-b=a-b+mod=a+mod-b。对“模”而言,2和10互为补数。实际上,以12为模的系统中,11和1,8和4,9和3,7和5,6和6都有这个特性,共同的特点是两者相加等于模。对于计算机,其概念和方法完全一样。n位计算机,设n=8,所能表示的最大数是11111111,若再加1成100000000(9位),但因只有8位,最高位1自然丢失(相当于丢失一个模)。又回到了 00000000,所以8位二进制系统的模为 。在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把补数用到计算机对数的处理上,就是补码。
原码:计算机中所有的数均用0,1编码表示,数字的正负号也不例外,如果一个机器数字长是n位的话,约定最左边一位用作符号位,其余n-1位用于表示数值。
在符号位上用”0″表示正数;用”1″表示负数。数值位表示真值的绝对值。凡不足n-1位的,小数在最低位右边加零;整数则在最高位左边加零以补足n-1位。这种计算机的编码形式叫做原码。
反码:反码通常是用来由原码求补码或者由补码求原码的过渡码。整数的反码定义如图1中图3整数反码定义,小数的定义如图1中图4小数反码定义。根据定义,可以得到机器数的反码的整数和小数中“0”的表示形式各有2种,“+0”和“-0”不一样,以8位机器数为例,整数的“+0”原码为0,0000000,反码为0,0000000;整数的“-0”原码为1,0000000,反码为1,1111111;小数的“+0”原码为0.0000000,反码为0.0000000;小数的“-0”原码为1.0000000,小数的“-0”反码为1.1111111。反码跟原码是正数时,一样;负数时,反码就是原码符号位除外,其他位按位取反。
八位二进制
如:十进制的+11
提示:非电话号码
补码:01110101
原码:00001011(此处取反)
反码:01110100(末位减1)
如:十进制的-11
补码:11110101
原码:10001011(此处取反)
反码:11110100(末位减1)
参考:
反码:https://baike.baidu.com/item/反码/769985?fr=aladdin
原码:https://baike.baidu.com/item/原码/1097586?fr=aladdin
补码:https://baike.baidu.com/item/补码/6854613?fr=aladdin