进制间的转换
“逢16进1”的进位制,一般用数字0到9和字母A到F(或a ~ f)表示,其中A ~ F表示10~15,这些称作十六进制数字。
16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……
例:2AF5换算成十进制:
用竖式计算:
第 0 位: 5 * 16 0 = 5
第 1 位: F * 16 1 = 240
第 2 位: A * 16 2 = 2560
第 3 位: 2 * 16 3 = 8192
结果为:10997
直接计算就是:
5 * 16 0 + F * 16 1 + A * 16 2 + 2 * 16 3 = 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代表负整数。
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10
0 - 0 = 0
0 - 1 = 1
1 - 0 = 1
1 - 1 = 0
0 * 0 = 0
0 * 1 = 0
1 * 0 = 0
1 * 1 = 1
0 ÷ 1 = 1
1 ÷ 1 = 1
拈加法二进制是一种特殊算法,与加法类似,但不需要进位,此算法在博弈论(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 * 2 0 = 0
第 1 位: 1 * 2 1 = 2
第 2 位: 0 * 2 2 = 0
第 3 位: 1 * 2 3 = 8
得:10
直接计算就是:
0 * 2 0 + 1 * 2 1 + 0 * 2 2 + 1 * 2 3 = 10
例:0.1101换算成十进制:
第 0 位: 0 * 2 0 = 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 * 2 0 + 1 * 2 -1 + 1 * 2 -2 + 0 * 2 -3 + 1 * 2 -4 = 0.8125
例: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。