28

打开计算器做这些小事对我来说似乎很烦人,我坚信“你知道的越多越好!” 所以在这里我问你如何将十六进制转换为十进制。

直到那一刻,我使用以下公式:

Hex:        Decimal:
12          12+6
22          22+2*6
34          34+3*6
49          49+4*6
99          99+9*6

当我以更高的数字(如 C0 或 FB)继续前进时,我会感到困惑

您使用的公式(大脑,非功能性)是什么?

4

9 回答 9

43

如果你认为十六进制是以 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

于 2009-05-26T12:08:11.720 回答
17

那不是公式……这甚至不像公式……

公式为:

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

于 2009-05-26T12:07:05.327 回答
10

当我发现我正在使用的十六进制数字是 32 位时,我几乎不再这样做了。那里没有太多乐趣。

对于较小的数字,我(最终)记住了一些模式:10 = 16、20 = 32、40 = 64、80 = 128(因为 100 = 256 和 80 少一点)。200 = 512 我记得是因为我曾经使用的某些机器的页面大小为 512(不再记得是什么机器了!)。1000 = 4096 因为那是另一台机器的页面大小。

还有,64=100, 32=50, B8=200

这就是全部。除此之外,我补充说。

于 2009-05-26T12:01:47.677 回答
7

为了记录,你的大脑确实使用了一种功能性的方法来寻找答案。这是我的大脑用来查找十六进制数的值的函数:

  1. 将十六进制数分成单独的数字。
  2. 将每个数字转换为其十进制值(因此 0-9 保持不变,A 为 10,B 为 11,等等)
  3. 从最右边的数字开始,将每个值乘以 16^X 次方,其中 X 是与最右边数字的距离(所以最右边的数字是 16^0,或 1,接下来是 16^1,或 16,接下来是 16^ 2 或 256 等)
  4. 将所有值加在一起。
于 2009-05-26T12:08:52.107 回答
3

记住 20h、40h 等的十进制值,直到 E0h。(我想你已经知道 100h。)然后通过在 1 到 16 之间加减一个数字来获得其他数字的十进制值。

于 2009-09-04T10:17:39.930 回答
2

十进制值将是

20h = 0x16^0 + 2x16^1 = 0x1 + 2x16 = 0 + 32 = 32

以十进制表示法,或(32)10.

对于40hhexa 我们将有64十进制,对于EOH,我们将有224十进制。

于 2011-11-11T07:36:36.043 回答
2

在确定单词中特定索引的十进制值时,对所有基进行概括:

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

于 2016-03-23T16:03:27.427 回答
0

我没有发现这些有用,所以这是我的方法:将其转换为两组二进制数来表示每个字母,然后取整个二进制表示并转换为十进制

示例:AB

甲/乙

= 1010 / 1011 二进制

= 171 (128 + 0 + 32 + 0 + 8 + 0 + 2 + 1) 十进制

于 2019-07-16T13:51:55.870 回答
0

这是另一种不涉及 16 次方且可以用铅笔和纸完成的方法:

从最左边的数字开始。将它乘以 16 并加上左数第二个数字。然后将结果乘以 16 并加上左起第三个数字。等等。

例如,转换0x20A5为十进制:

  2 * 16 +  0 = 32
 32 * 16 + 10 = 522   (remember that A is 10 decimal)
522 * 16 +  5 = 8357

转换的结果是 8,357。

于 2019-08-19T14:55:35.487 回答