一、转化方式
1、原码
把数值转成二进制,从右往左,位数不足补0。
首位是符号:0:正数 1:负数。
原码不能运算
2、反码
正数,反码 = 原码
负数:反码 = 原码 符号位不动,其他位数取反
3、补码
正数:补码 = 原码
负数:负数 补码 = 反码 1
4、移码
正数、负数:移码 = 反码 首符号位 取反。
5、示例:
数值6、-6的一个字节(8位),原码、补码、反码、移码
数值 6 -6
原码:0000 0110 (不变) 1000 0110
反码:0000 0110 (不变) 1111 1001 (符号位不动,其他位数取反)
补码:0000 0110 (不变) 1111 1010 (反码 1,符号位也进位,看下图)
移码:1000 0110 (反码首符号位取反) 0111 1010 (反码首符号位取反)
原码、反码、补码、移码
二、取值范围
原码: -(2^(n-1) - 1) 到 2^(n-1)-1 ; 8位: -127 到 127
反码:-(2^(n-1) - 1) 到 2^(n-1)-1 ; 8位:-127 到 127
补码:-2^(n-1) 到 2^(n-1)-1 ; 8位: -128 到 127 (因为补码的 0和-0是一样的)