数据的原码、反码、补码和移码
| 类型 | 正数 | 负数 | 示说明 |
|---|---|---|---|
| 原码 | 最高位符号位为0,表示正数,其他位存放该数的二进制的绝对值 | 最高位符号位为1,表示负数,其他位存放该数的二进制的绝对值 | |
| 反码 | =原码 | 在原码基础上,符号位不动,其他位按位取反 | |
| 补码 | 等于原码 | 反码+1或[(2^机器字长)-|负数|]的原码 | 整型数据在内存中,以二进制的补码形式进行存放;+10的补码: |
| 移码 | 补码的符号位取反 | 补码的符号位取反 |
1、补码
正数:原码 =反码=补码
负数:补码=原码符号位不变,数值位取反+1
8bit空间,补码规定1000 0000专门表示最小值-128
举例10和-10的补码存储过程如下:
(1)+10的补码
将10进制转换为二进制:1010
补齐8位,最高位位符号位0:0000 1010
(2)-10的补码:
写出10的8位原码 0000 1010
改写成-10,最高位为1:1000 1010
求反码(符号位不变,其他位01翻转):1111 0101
反码+1:1111 0110
结论:-10的8位补码:1111 0110
-10的16位补码:1111 1111 1111 0110
举例10和-10的补码读取过程如下:
对补码-1,取反(符号位保持):1111 0101-》1000 1010
在实际计算机中,有符号和无符号是有区别的:CPU把数据进行计算时,需要把变量的数据从存储单元取出来给到CPU内部的寄存器(运算寄存器),当变量的数据小于寄存器的时候,有符号的数据拷贝到寄存器的时候,高出高位,需要补符号位。无符号的数据,拷贝到寄存器,多出来的为补0(总结:有符号的补符号,无符号的补0)