(这里对定义不再赘述,直接记录计算方法和心得。)
原码:
非常直观的机器码,与真值差别不大。
正数前补0,后面照抄;负数前补1,后边照抄。
小数相同处理方法。
反码:
解决负数加法运算问题,将减法运算转换为加法运算。
正数前补0,后面照抄;负数前补1,真值部分0变1,1变0(-1001 -> 11001 -> 10110(结果))。
补码:
用来计算加减法非常方便。容易算错。
正数前补0,后面照抄(1001->01001(结果));负数前补1,后面真值0变1,1变0,最后一位+1(-1001 -> 10110+1=10111(结果))。
小数相同处理方法。
&:补码求真值:正数前去0,照抄;负数整个补码0变1,1变0,最后一位+1(10111 -> (01000+1=01001) -> 1001(结果))。
移码:
专门用来表示整数的机器码。
正数符号位是1,数值位不变;负数符号位是0,数值位0变1,1变0,最后一位+1。
串联:
真值 - > 原码 -> 反码 -> 补码 -> 移码
1010 01010 01010 01010 11010
-1010 11010 10101 10110 00110
关于0的表示:(n=5)
原码: +0=00000 -0=10000
反码: +0=00000 -0=11111
补码: +0=00000 -0=10000 -> 11111+1 -> 100000 ->00000(高位溢出)
移码: +0=10000 -0=00000 -> 01111+1 -> 10000
综上:原码,反码表示0有两种;补码,移码表示0有一种。
由上一模块所述,当用四中编码表达一个数(n=5)时,都有2^5的使用范围。但由于原码,反码用两种数来表示’0’,而补码,移码只用一个数表示,所以范围就多了一个……
明确点说,-10000,原码反码没办法表示(n=5)。
但是补码可表示成10000,移码可表示成00000。
推导:-15=11111,-1=10001,-16=-15-1=11111+10001=110000 ->10000