为什么 Math.pow(16, 6) 不等于 parseInt(0xFFFFFF, 10)?

Why is Math.pow(16, 6) not equal to parseInt(0xFFFFFF, 10)?

我正在处理 CSS 颜色和十六进制编码。白色以 CSS RGB 表示法表示为十六进制 #FFFFFF,或 Javascript.

中的 0xFFFFFF

如果我没有理解错的话,十六进制数的每个位置都是从0到16。所以一系列六个F等于16 * 16 * 16 * 16 * 16 * 16,或16的6次方: Math.pow(16, 6)。这个操作的结果是16777216.

我们还可以将十六进制值解析为以 10 为基数:parseInt(0xFFFFFF, 10)。这个操作的结果是16777215.

为什么两次操作相差1?

在十六进制中,F = 15,而不是 16,将 F 相邻 n 次将得到 16^n - 1 类似于将 9 相邻 n 次将得到 10^n -1。

这就是差异的原因。

让我们从十进制数开始。

99999910 不等于 106.

99999910比106.

少一

99999910 = 9 × 105 + 9 × 104 + 9 × 103 + 9 × 102 + 9 × 101 + 9 × 100

6位数字可以表示106个不同的数:0到99999910.


十六进制相同。

FFFFFF16 不等于 166.

FFFFFF16 比 166.

少一

FFFFFF16 = 15 × 165 + 15 × 164 + 15 × 163 + 15 × 162 + 15 × 161 + 15 × 160

6个十六进制数字可以用来表示166个不同的数字:0到FFFFFF16.