进制间的转换
一、十六进制
“逢16进1”的进位制,一般用数字0到9和字母A到F(或a ~ f)表示,其中A ~ F表示10~15,这些称作十六进制数字。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
十六进制转十进制
16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……
例:2AF5换算成十进制:
用竖式计算:
第 0 位: 5 * 16 0 = 5
第 1 位: F * 161 = 240
第 2 位: A * 162 = 2560
第 3 位: 2 * 163 = 8192
结果为:10997
直接计算就是:
5 * 16 0 + F * 161 + A * 162 + 2 * 163 = 10997
十进制转十六进制
例:30换算成十六进制:
二、二进制
二进制是用0和1两个数码来表示的数字,它的基数为2,“逢二进一”的进位制,借位规则是“借一当二”。
计算机内部表示数的字节单位是定长的,如 1024 512 256 128 64 32 16 8 4 2 1 (如果有小数的话就继续往右边列举,如0.5 0.25 0.125 0.0625……),所以位数不够时,高位补零,首位是0代表正整数,首位为1代表负整数。
1、加法
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10
2、减法
0 - 0 = 0
0 - 1 = 1
1 - 0 = 1
1 - 1 = 0
3、乘法
0 * 0 = 0
0 * 1 = 0
1 * 0 = 0
1 * 1 = 1
4、除法
0 ÷ 1 = 1
1 ÷ 1 = 1
5、拈加法
拈加法二进制是一种特殊算法,与加法类似,但不需要进位,此算法在博弈论(Game Theory)中被广泛利用。
十进制正整数转二进制
例:42换算成二进制:
十进制负整数转二进制
先将对应的正整数转换成二进制后,对二进制取反,然后对结果再加一
例:-42换算成二进制:
十进制小数转二进制,通常是用乘二取整法来获得的:
例:0.65 换算成二进制:
0.65 * 2 = 1.3 取 1,留下 0.3 继续乘2取整
0.3 * 2 = 0.6 取 0,留下 0.6 继续乘2取整
0.6 * 2 = 1.2 取 1,留下 0.2 继续乘2取整
0.2 * 2 = 0.4 取 0,留下 0.4 继续乘2取整
0.4 * 2 = 0.8 取 0,留下 0.8 继续乘2取整
0.8 * 2 = 1.6 取 1,留下 0.6 继续乘2取整
0.6 * 2 = 1.2 取 1,留下 0.2 继续乘2取整
……
一直循环,知道达到精度限制才停止(所以计算机保存的小数一般会有误差,所以在变成中,要想比较两个小数是否相等,只能比较某个精度范围内是否相等)
这时十进制的0.65,用二进制就可以表示为:0.1010011
二进制转十进制整数
例:1010换算成十进制:
先补齐位数:00001010(首位为0所以是正整数)
第 0 位: 0 * 20 = 0
第 1 位: 1 * 21= 2
第 2 位: 0 * 22 = 0
第 3 位: 1 * 23 = 8
得:10
直接计算就是:
0 * 20 + 1 * 21 + 0 * 22+ 1 * 23 = 10
二进制转十进制小数
例:0.1101换算成十进制:
第 0 位: 0 * 20= 0
第 -1 位: 1 * 2-1 = 0.5
第 -2 位: 1 * 2-2 = 0.25
第 -3 位: 0 * 2-3 = 0
第 -4 位: 1 * 2-4= 0.625
得:0.8125
直接计算就是:
0 * 20 + 1 * 2-1 + 1 * 2-2 + 0 * 2-3 + 1 * 2-4 = 0.8125
二进制与十六进制的对应关系
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
十六进制转二进制
例:2AF5换算成2进制:
第0位:(5)16 = (0101) 2
第1位:(F)16 = (1111) 2
第2位: (A) 16 = (1010) 2
第3位: (2) 16 = (0010) 2
得:(2AF5)16=(0010.1010.1111.0101)2
二进制转十六进制
00111101可以这样分:
0011 | 1101(最高位不够可用零代替)
0 0 1 1 | 1 1 0 1
左半边 = 2 + 1 = 3 右半边 = 8 + 4 + 1 = 13 = D
结果,0111101就可以换算成16进制的3D。