概述
对于原码、反码和补码有了一些理解,分享给大家
真值
正、负号加某进制数绝对值的形式成为真值
例:X = +1011 Y = -1011
机器数
符号数码化的数称为机器数
机器数有四种表示方法:原码、补码、反码和移码。下面的描述添加为机器字长为8位二进制
原码
最高位表示真值符号:0正,1负,且符号位不参与运算,计算机要实现原码加(擅长)和减的运算器
注意:1000 0000和0000 0000都表示0,所以,取值范围为:[-127,127]
反码
最高位表示真值符号:0正,1负,且符号位不参与运算,计算机只需实现反码的加运算器,但需设计反码符号位和其它位分开的逻辑
注意:1000 0000和0000 0000都表示0,所以,取值范围为:[-127,127]
补码
最高位表示真值符号:0正,1负,符号位参与运算(“模”的概念)
+0和-0的表示: 0000 0000; -128的表示:10000000
补码的表示范围[-128,127]的解释
补码使计算机对所有数据的表示唯一化,+0和-0表示都用的是高位为0的128中排序中的同一种排序(00000000),所以,剩下的127中排序最大可以表示正整数为127,又因最高位为1的排序有128种,所以,可表示的最小负数为-128
原码、反码和补码之间的转换
正数:三者相同
负数:原码对应的反码为,原码各位取反(除符号位);
反码对应的补码为,反码+1;
补码对应的反码为,补码各位取反(除符号位)+1;
注意:由于原码和反码根本就不存在-128的表示,所以,当说到-128时,就不能有这种转换,至于计算机是如何将-128真值转换为补码,或者说为,计算机是如何将真值转换为补码的?我们无序了解,这个就是为什么上面没有写反码和补码的得到方式(我们通常错误的理解得到方式是其三者的转换关系),可能你会说,-128补码我只能死记硬背了吗?其实不然,只要我们求出补码表示-1的8位二进制的排列方式,我们就可以推出-128的补码,不明白知道-1的补码为什么就可以推出-128的补码的,可以看看上面“补码的表示范围[-128,127]的解释”的描述
总结
对于原码、反码和补码的产生的原因,以及原码、反码和补码各自的内容,以及之间的关系上面都以讲出,认真看的话,可以帮助你理解一些内容。