「这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战」
Base 16:十六进制表示
要表示一个二进制数,你需要很多零和一来组合。这个表示很很长。为了表示十进制数 1324,我们需要使用 11 个二进制字符。因此我们需要更简洁的表示方法。
In [1]: bin(1324)
Out[1]: '0b10100101100'
十六进制(Hexadecimal)也是一种位置数字系统,它使用 16 个字符来表示一个数字。
- 前缀 Hexa 在拉丁语中的意思是 6
- Decimal 来自拉丁词 Decem,意思是 10
十六进制的字符是数字和字母。我们使用从 0 到 9(10 个字符)的数字和从 A 到 F(6 个字符)的字母。
上图是 16 进制 与 10 进制之间的关系表,0 到 9 的数字对应十进制系统中的相同值,字母 A 对应于 10,字母 B 对应于 11 ...等。这是十六进制数字系统的特点;我们使用字母来表示数值(节省表示的空间)。
这也许会给我们带来一些疑惑,我们必须尝试去接受它,我们需要更多的字符所以我们拿了字母... 你可以看到我们在这个符号中引入了字母。那是因为从 0 到 9,你有十个字符、十个数字,但是对于基数为 16 的编号系统,我们还需要六个字符。这就是为什么我们采用了字母表的前六个字母。这是历史的选择;其他字符可以替换字母,系统将仍然相同。
首先明确,无论是10 进制的 1324 还是 16 进制的 52C,它们表示的含义都是同一个数量。
如果我们将一个 16 进制数转换成 一个 10进制数,计算方式是:从 16 进制数的低位(右边)开始,逐步向高位(左边),取每位的字符对应 10 进制数值,与 16 的 n
次幂相乘(这里的 n 不是固定的,它等于该字符所在的位序 - 1,位序指从低位到高位的排序),最后将每位的计算结果相加就是 10 进制的值了。
举个例子:10 进制的 1324 相当于 16 进制的 52C
# 十六进制 5 2 C
1. 计算 'C':
因为 'C' 对应的10进制值是12,它所在的位序是1,即它是右边第1位,所以它的值为:12*(16^(1-1)) = 12
2. 计算'2':
因为 '2' 对应的10进制值是2,它所在的位序是2,即它是右边第2位,所以它的值为:2*(16^(2-1)) = 32
3. 计算'5':
因为 '5' 对应的10进制值是5,它所在的位序是5,即它是右边第3位,所以它的值为:5*(16^(3-1)) = 1280
4. 将每位结果相加:
12 + 32 + 1280 = 1224
思考题
- 不用代码,通过纸和笔计算下
0x55AA
对应的 10 进制数 - 使用自己熟悉的语言,不要用内置函数,手撕一个 16 进制转 10 进制的函数