- 1 字 (word) = 2 个字节
- 1 字节 (byte) = 8 比特 (bit)
有符号数
If the MSB is 1 then the number is negative, otherwise positive ordinary binary.
原码
Sign-magnitude,最高位是 sign 表示符号,其余位是 magnitude 表示数值。
二进制 | 十进制 |
0111 1111 | 127 |
1111 1111 | -127 |
- 因为需要分别处理符号位和数值部分,它无法简单地进行加减运算。
- 它还存在 +0 和 -0 两个表示零的值,会导致一些问题。
反码
One's complemen
- 正数的表示与原码相同(即不变)
- 负数的表示即把每一位取反
二进制 | 十进制 |
0111 1111 | 127 |
1000 0000 | -127 |
- Invert(反转):将二进制数中的每个位取反(0变1,1变0)。可以通过使用位逻辑运算符“非”(NOT)或位取反运算符(~)来实现。
例如,对于二进制数 1010,反转后变为 0101。
- Reverse(翻转):将二进制数中的位按照相反的顺序重新排列,即将最左边的位移到最右边,最右边的位移到最左边。可以通过使用位移和按位操作符来实现。
例如,对于二进制数 1010,翻转后变为 0101。
补码
Two's complement
- 正数的表示与原码相同
- 负数的表示在反码的基础上加 1
二进制 | 十进制 |
0111 1111 | 127 |
1000 0000 | -128 |
1000 0001 | -127 |
补码可以直接进行加减法运算
- 补码的加法 ➡️ 将相加得到的结果(再按照补码的规则转换为原码)
- 补码的减法 ➡️ 将减数的补码按位取反再加 1,然后与被减数的补码相加
十六进制
Hexadecimal
英文字母 A,B,C,D,E,F 分别表示数字 10~15
转十进制
负数十进制
转二进制
四个一组,不够补0,每组各个值为8,4,2,1
八进制
Octal
采用 0~7 来表达一个数
转十进制
转二进制
三个一组
BCD 码
Binary-Coded Decimal
将每个十进制数字编码成一个4位的二进制数形式
- BCD 字节的高 4 位(称为“区位”,zone)表示符号,其余称为数字 (digit)
8421 码
最常用的 BCD 编码方式,其他方式还有 5421 码、2421 码
💡 BCD码在精度方面有很大的提高
- 例如,十进制数 0.3 在存储为二进制数时是一个循环小数。如果从二进制数转换回十进制数后则变为了 0. 296875,结果造成误差。
- BCD 编码系统中,十进制数 0.3 直接存储为 11110011,避免误差。
压缩 BCD 码
Packed
将多个相连的数字放入相邻的半字节时,只留下一个 4 位的半字节给的符号。
- 例:-1265
- 非压缩码:1111
0001
11110010
11110110
11110101
- 压缩码: 在低位数字后面加上符号,在高位补全0