学而不思则罔,思而不学则殆
类型 | 简要说明 |
---|---|
原码 | 符号位+绝对值 |
反码 | 正数的反码等于原码,负数在原码的基础上,符号位不变,其余为取反 |
补码 | 正数的补码等于原码,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1) |
0 表示 正
1 表示 负
原码
原码 = 符号位+绝对值
[+1]原码 = 0000 0001
[-1]原码 = 1000 0001
反码
正数的反码等于原码
负数在原码的基础上,符号位不变,其余为取反
[+1]原码 = 0000 0001 …… [+1]反码 = 0000 0001
[-1]原码 = 1000 0001 …… [-1]反码 = 1111 1110
补码
正数的补码等于原码
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1]原码 = 0000 0001 …… [+1]反码 = 0000 0001……[+1]补码 = 0000 0001
[-1]原码 = 1000 0001 …… [-1]反码 = 1111 1110…… [-1]补码 = 1111 1111
测试
在java中int占32位,如下是计算中展示的机器码。
0 = 00000000000000000000000000000000
1 = 00000000000000000000000000000001
3 = 00000000000000000000000000000011
7 = 00000000000000000000000000000111
-1 = 11111111111111111111111111111111
-3 = 11111111111111111111111111111101
-7 = 11111111111111111111111111111001
正数=原码=反码=补码
比如-3的机器码是11111111111111111111111111111101
【-3】原码=10000000000000000000000000000011
【-3】反码=11111111111111111111111111111100
【-3】补码=11111111111111111111111111111101
所以我们在程序看到的【-3】的机器码是11111111111111111111111111111101 = 补码