二进制数
二进制也存在正负之说,使用最高位来表示符号位,1代表负,0代表正,把带符号位的机器数对应的真正数值称为机器数的真值
字长是指计算机一次可处理的二进制数的码位长度,64位处理器是指处理器的字长为64位
四种表现形式
二进制数有四种表现形式,为原码、反码、补码和移码,其中反码和补码是为了在二进制中表示负数而产生的
原码:表示二进制本身所代表的形式最高位是符号位,其余低位表示数值的绝对值,如+3原码为00000011,-3原码为10000011,在原码中0有+0和-0之分,符号位不同
反码:正数的反码与原码一样,负数的反码是把其绝对值各位取反(符号位不变)
补码:由于原码中包含有符号位,在进行加减运算时不方便,所以出现了另一种表现形式,补码,正数的补码和原码相同,负数的补码是反码加一(符号位不变)
在补码中会出现第一位是符号位,后边全是0的情况,这种情况表示的不是0或者-0,如1000表示的是-8,+0和-0的补码就是0
移码:这个使用并不多,是把补码的符号位取反
正数的原码、反码、补码三者一样
数据表示范围
码制 | 定点整数 | 定点小数 | 数码个数 |
---|---|---|---|
原码 | -($2^{n-1}$-1) ~ +($2^{n-1}$-1) | -(1-$2^{-(n-1)}$) ~ +(1-$2^{-(n-1)}$) | $2^n-1$ |
反码 | -($2^{n-1}$-1) ~ +($2^{n-1}$-1) | -(1-$2^{-(n-1)}$) ~ +(1-$2^{-(n-1)}$) | $2^n-1$ |
补码 | -($2^{n-1}$) ~ +($2^{n-1}$-1) | -1 ~ +(1-$2^{-(n-1)}$) | $2^n$ |
移码 | -($2^{n-1}$) ~ +($2^{n-1}$-1) | -1 ~ +(1-$2^{-(n-1)}$) | $2^n$ |
在移码和补码中,+0和-0的编码是相同的
计算机存储方式
在计算机底层都是以补码的形式存储的,这是为什么呢?
- 使用补码可以保证数字0的表示统一,由于0既非正数,也非负数,使用原码表示的话符号位难以确定,而使用补码可以解决数字0的存储问题
- 使用补码可以简化整数的加减法计算,将减法计算视为加法计算,实现减法和加法的完全统一,实现正数和负数加法的统一