First
数值的转换
二进制与十进制:
二进制转十进制:101010(有6位) = (1 * 2^5) + (0 * 2^4) + (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (0 * 2^0)
=32 + 0 +8 + 0 +2 +0
=42
十进制转二进制:57
- 将57除以2,得到商28,余1(LSB,最低有效位)。
- 将商28再除以2,得到商14,余0。
- 将商14再除以2,得到商7,余0。
- 将商7再除以2,得到商3,余1。
- 将商3再除以2,得到商1,余1。
- 将商1再除以2,得到商0,余1(MSB,最高有效位)
- 将余数从下往上排列,转换二进制位111001
二进制与八进制:
二进制转八进制:1101101
-
按照高位将3个化为一组:110 110 1
-
然后,将每组转换为对应的八进制数:
110(二进制)= 6(八进制)
110(二进制)= 6(八进制)
1(二进制)= 1(八进制)
-
最后,将每组的八进制数连在一起,即得到最终的八进制数:
1101101(二进制)= 661(八进制)
八进制转二进制:123(八进制)
-
将八进制数的每一位分别转换成对应的三位二进制数
1:001
2:010
3:011
-
将这些三位二进制数连接在一起,即得到最终的二进制数:
123(八进制) = 001010011(二进制)
二进制与十六进制:
二进制转十六进制:110110101
-
将二进制数按照每四位一组进行分组:1101 1010 1
-
将每组转换为对应的十六进制数:
1101(二进制)= D(十六进制)
1010(二进制)= A(十六进制)
1(二进制)= 1(十六进制)
-
将每组的十六进制数连在一起,即得到最终的十六进制数:
110110101(二进制)= DA1(十六进制)
十六进制转二进制:3F7
-
将十六进制数的每一位分别转换成对应的四位二进制数:
数字3转换成二进制数为0011
字母F转换成二进制数为1111
数字7转换成二进制数为0111
-
将这些四位二进制数连接在一起,即得到最终的二进制数:
3F7(十六进制)= 001111110111(二进制)
十进制小数转换二进制
十进制:0.10
- 将0.10乘以2得到0.20,整数部分为0,记录下0。
- 将0.20乘以2得到0.40,整数部分为0,记录下0。
- 将0.40乘以2得到0.80,整数部分为0,记录下0。
- 将0.80乘以2得到1.60,整数部分为1,记录下1。
- 将0.60乘以2得到1.20,整数部分为1,记录下1。
- 将0.20乘以2得到0.40,整数部分为0,记录下0。
- 将0.40乘以2得到0.80,整数部分为0,记录下0。
- 将0.80乘以2得到1.60,整数部分为1,记录下1。
- 重复以上步骤
在这个过程中,小数部分出现了重复的循环,因此小数部分不再改变。
因此,0.10的二进制表示为0.00011001100110011…
反码
定义:将负数的绝对值的二进制表示按位取反(0变1,1变0)
-5:绝对值5;5二进制0000 0101
取反为1111 1010;
在反码中,负数的最高位为1,表示负数,而正数的最高位为0,表示正数
补码
定义:将负数的绝对值的二进制表示按位取反,然后加1
-5:反码为 1111 1010
补码:反码+1;1111 1011
-5的二进制表示(-5的补码):1111 1011
移码
补码的符号位(最高位)取反
数值范围
源码:-(2n-1- 1) ~ 2n-1 - 1
反码:-(2n-1 - 1) ~ 2n-1 - 1
补码:-2n-1 ~ 2n-1 - 1
移码:-2n-1 ~ 2n-1 - 1
浮点数
N = Re * M
M:尾数
e:指数(通常移码表示)
R:基数(通常为2)
十进制浮点数表示: 25.125
- 整数部分:25(D:decimal) = 1 1001(B:binary)
- 小数部分:0.125(D) = 0.001(B)
- 25.125(D) = 11001.001(B) = 1.1001001 * 2^4(B)
- 符号位S:正数为0;尾数M:1.1001001 指数E:4(D) = 100(B)
存储方式:符号位 | 指数(价码) | 尾数