数据的表示(原码反码移码补码)
数的表示要了解它的计算和表示方法,以及数值取值范围
-
原码:把一个数转成二进制的形式,一般确定用一个字节也就是8bit来表示二进制,如果转成的二进制不足以8位,那在高位补充0即可。最高的为符号位(带符号的情况下)对于正数而言符号位为0,负数符号位为1。
原码这种操作方式是***不能***在计算机里直接做加减乘除运算的,例如:
1的原码:00000001
-1的原码:10000001
若是原码相加,00000001+10000001=10000010
得到的结果却是-2的原码
因此提出了其他的编码方式——反码 -
反码:也是区分正负。
如果是正数,反码与原码相同。包括后面讲到的补码,正数的补码也是与原码相同。
如果是负数,先把符号位不动,把后面所有位置在原码基础上取反。
如果用反码进行运算,比如1和-1相加。
1的反码:00000001
-1的反码:11111110
若是反码相加,00000001+11111110=11111111
由反码推导出这个数的原码就是10000000,即-0
其实这个结果跟我们预期的结果已经接近了,只是前面的符号位不是很习惯。由此我们来看补码 -
补码:如果是正数,正数的补码和原码是一样的。
如果是负数,负数的补码是在反码的基础上+1
若是补码相加,1的补码:00000001,-1的补码:11111111
00000001+11111111=00000000,即+0 -
移码:移码一般在特定场合使用,比如在浮点运算中用作阶码。那么移码是怎么产生的呢?移码是在补码的基础上把首位做取反,其余部分与补码一致
-
经常的一个考点:数值的表示范围。