打开计算器做这些小事对我来说似乎很烦人,我坚信“你知道的越多越好!” 所以在这里我问你如何将十六进制转换为十进制。
直到那一刻,我使用以下公式:
Hex: Decimal:
12 12+6
22 22+2*6
34 34+3*6
49 49+4*6
99 99+9*6
当我以更高的数字(如 C0 或 FB)继续前进时,我会感到困惑
您使用的公式(大脑,非功能性)是什么?
打开计算器做这些小事对我来说似乎很烦人,我坚信“你知道的越多越好!” 所以在这里我问你如何将十六进制转换为十进制。
直到那一刻,我使用以下公式:
Hex: Decimal:
12 12+6
22 22+2*6
34 34+3*6
49 49+4*6
99 99+9*6
当我以更高的数字(如 C0 或 FB)继续前进时,我会感到困惑
您使用的公式(大脑,非功能性)是什么?
如果你认为十六进制是以 16 为基数的,它实际上很容易:
从最低有效数字开始,向最高有效数字(从右到左)工作,然后将数字乘以 16 的递增幂,然后将结果相加。
例如:
0x12 = 2 + (1 * 16) = 18
0x99 = 9 + (9 * 16) = 153
然后,记住 A = 10、B = 11、C = 12、D = 13、E = 14 和 F = 15
所以,
0xFB = 11 + (15 * 16) = 251
那不是公式……这甚至不像公式……
公式为:
X*16^y 其中 X 是您要转换的数字,y 是数字的位置(从右到左)。
所以..如果你想将DA145转换为十进制将是..
(5 * 16^0) + (4 * 16^1) + (1 * 16^2) + (10 * 16^3) + (13 * 16^4)
你必须记住字母是:
A - 10
B - 11
C - 12
D - 13
E - 14
F - 15
当我发现我正在使用的十六进制数字是 32 位时,我几乎不再这样做了。那里没有太多乐趣。
对于较小的数字,我(最终)记住了一些模式:10 = 16、20 = 32、40 = 64、80 = 128(因为 100 = 256 和 80 少一点)。200 = 512 我记得是因为我曾经使用的某些机器的页面大小为 512(不再记得是什么机器了!)。1000 = 4096 因为那是另一台机器的页面大小。
还有,64=100, 32=50, B8=200
这就是全部。除此之外,我补充说。
为了记录,你的大脑确实使用了一种功能性的方法来寻找答案。这是我的大脑用来查找十六进制数的值的函数:
记住 20h、40h 等的十进制值,直到 E0h。(我想你已经知道 100h。)然后通过在 1 到 16 之间加减一个数字来获得其他数字的十进制值。
十进制值将是
20h = 0x16^0 + 2x16^1 = 0x1 + 2x16 = 0 + 32 = 32
以十进制表示法,或(32)10
.
对于40h
hexa 我们将有64
十进制,对于EOH
,我们将有224
十进制。
在确定单词中特定索引的十进制值时,对所有基进行概括:
b^i*n
其中 b 是基数,i 是单词中的索引,n 是索引处的数值。通过记住 b,i,n = bin = binary 的缩写来记住这一点。
对于base2(二进制)1 000,获取1所在的值:
b = base,即base2:b=2
i = word 中从 0 开始的索引,即 1000,1 在第 3 个索引中,i=3
n = 索引中列出的数字,即 1000,第 3 个索引为 1,n=1
所以,2^3*1 = 8
对于base10(十进制)9 00,获取9所在的值:
b=10, i=2, n=9 : 10^2*9 = 100*9 =900
对于base16(十六进制)0x0 f 0,获取f所在的值:
b=16, i=1, n=15 (0-9,af,f=15) : 16^1*15 = 16*15 = 240
请注意,这可以用来确定一个单词中每个索引的值,然后可以将每个值求和以确定完整的单词值。
例如 1001,从左到右(总和顺序无关紧要):
(2^3*1=8) + (2^2*0=0) + (2^1*0=0) + (2^0*1=1) = 9
我没有发现这些有用,所以这是我的方法:将其转换为两组二进制数来表示每个字母,然后取整个二进制表示并转换为十进制
示例:AB
甲/乙
= 1010 / 1011 二进制
= 171 (128 + 0 + 32 + 0 + 8 + 0 + 2 + 1) 十进制
这是另一种不涉及 16 次方且可以用铅笔和纸完成的方法:
从最左边的数字开始。将它乘以 16 并加上左数第二个数字。然后将结果乘以 16 并加上左起第三个数字。等等。
例如,转换0x20A5
为十进制:
2 * 16 + 0 = 32
32 * 16 + 10 = 522 (remember that A is 10 decimal)
522 * 16 + 5 = 8357
转换的结果是 8,357。