重要概念
-
数据在内存中存储的时候都是以二进制的形式存储的
-
原码、反码、补码都是二进制,是二进制的不同表现形式
-
数据是以补码的二进制存储的
解读 int
32位系统,一个int类型变量,在内存中占据4个字节,4*8=32位
正数的表示:最高位为 0
负数的表示:最高位为 1
区别与联系
表一:原码、正码与补码
类型 | 详细解释 |
---|---|
原码 | 最高位表示符号位,剩下的位数是这个数的绝对值的二进制 |
反码 | 正数的反码是其原码,负数的反码符号位不变,其他位取反 |
补码 | 正数的补码是其原码,负数的补码是在其反码的基础上加1 |
表二:举例
类型 | 正数 10 | 负数 -8 |
---|---|---|
原码 | 00000000 00000000 00000000 00001010 | 10000000 00000000 00000000 00001000 |
反码 | 00000000 00000000 00000000 00001010 | 11111111 11111111 11111111 11110111 |
补码 | 00000000 00000000 00000000 00001010 | 11111111 11111111 11111111 11111000 |
补码的实际应用
eg:计算 3+(-2)
3 和 -2 的原码
数字 | 表示 |
---|---|
3 | 00000000 00000000 00000000 00000011 |
-2 | 10000000 00000000 00000000 00000010 |
原码计算(结果为 -5)
数字 | 表示 |
---|---|
3 | 00000000 00000000 00000000 00000011 |
-2 | 10000000 00000000 00000000 00000010 |
-5 | 10000000 00000000 00000000 00000101 |
反码计算(结果为 0)
数字 | 表示 |
---|---|
3 | 00000000 00000000 00000000 00000011 |
-2 | 11111111 11111111 11111111 11111101 |
0 | 00000000 00000000 00000000 00000000 |
补码计算(结果为 1)
数字 | 表示 |
---|---|
3 | 00000000 00000000 00000000 00000011 |
-2 | 11111111 11111111 11111111 11111110 |
1 | 00000000 00000000 00000000 00000001 |