1. 原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
2. 反码
反码的表示方法是:
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
3. 补码
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
1-1 = 1+(-1)=(00000001) 反+ (11111110)反 = (11111111)反 = -0
补充:2个字节情况下,在补码中用(-128)代替了(-0),所以补码的表示范围为:(-128~0~127)共256个
补码:0正确
1-1 = 1+(-1)=(00000001) 补+ (11111111)补 = (00000000)补 = 0
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
2. 反码
反码的表示方法是:
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
3. 补码
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
5.原码补码转换
原码转补码:正数不变;负数符号位保持,其余位取反,最后加1。
补码转原码:正数不变;负数符号位保持,其余位取反,最后加1。
6.为什么要使用补码
1 - 1 的运算:
1-1 = 1+(-1)=(00000001)原 + (10000001)原 = (10000010)原 =(10000010)原 = -2
1-1 = 1+(-1)=(00000001) 反+ (11111110)反 = (11111111)反 = -0
补充:2个字节情况下,在补码中用(-128)代替了(-0),所以补码的表示范围为:(-128~0~127)共256个
补码:0正确
1-1 = 1+(-1)=(00000001) 补+ (11111111)补 = (00000000)补 = 0