导航


HTML

CSS

JavaScript

浏览器 & 网络

版本管理

框架

构建工具

TypeScript

性能优化

软实力

算法

UI、组件库

Node

冷门技能

⭐️ n进制 → 十进制

二进制 → 十进制

将二进制的 101011 转换为十进制的步骤如下:

  1. 第 0 位:1 * 2 ^ 0 = 1;
  2. 第 1 位:1 * 2 ^ 1 = 2;
  3. 第 2 位:0 * 2 ^ 2 = 0;
  4. 第 3 位: 1 * 2 ^ 3 = 8;
  5. 第 4 位:0 * 2 ^ 4 = 0;
  6. 第 5 位:1 * 2 ^ 5 = 32;
  7. 读数:把结果值相加,1 + 2 + 0 + 8 + 0 + 32 = 43,即(101011)B=(43)D。

八进制 → 十进制

八进制就是逢 8 进 1 ,八进制数采用 0~7 这八数来表达一个数

将八进制的 (53)O 转换为十进制的步骤如下:

  1. 第 0 位:3 * 8 ^ 0 = 3;
  2. 第 1 位:5 * 8 ^ 1 = 40;
  3. 读数:结果值相加,3 + 40 = 43;即 (53)O=(43)D。

十六进制 → 十进制

十六进制就是逢 16 进 1 ,十六进制的 16 个数为 0123456789ABCDEF。

将十六进制的 (2B)H 转换为十进制的步骤如下:

  1. 第 0 位 B x 16 ^ 0 = 11; (从 9 往后,A是10,B是11)
  2. 第 1 位 2 x 16 ^ 1 = 32;
  3. 读数:把结果值相加,11 + 32 = 43,即(2B)H=(43)D。

⭐️ 十进制 → n进制

十进制 → 二进制

除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。

将十进制的 43 转换为二进制的步骤如下:

  1. 将商 43 除以 2 ,商 21 余数为 1;
  2. 将商 21 除以 2,商 10 余数为 1;
  3. 将商 10 除以 2 ,商 5 余数为 0;
  4. 将商 5 除以 2,商 2 余数为 1;
  5. 将商 2 除以 2,商 1 余数为 0;
  6. 将商 1 除以 2,商 0 余数为1;
  7. 读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,101011,即(43)D=(101011)B。

Untitled

十进制小数 → 二进制

整数十进制转二进制已经知道了,再来看看小数是怎么转二进制的,小数部分的转换不同于整数部分,它采用的是乘 2 取整法 ,将十进制中的小数部分乘以 2 作为二进制的一位,然后继续取小数部分乘以 2 作为下一位,直到不存在小数为止。

以 8.625 转二进制作为例子:

但并不是所有小数都可以用二进制表示,上边的 0.625 小数是一个特例,刚好通过乘 2 取整法的方式完整的转换成二进制。

接下来我们看看 0.1 的例子:

可以发现, 0.1 的二进制表示是无限循环的。

由于计算机的资源是有限的,所以是没办法用二进制精确的表示 0.1,只能用「近似值」来表示,就是在有限的精度情况下,最大化接近 0.1 的二进制数,于是就会造成精度缺失的情况

十进制 → 八进制

除8取余法,即每次将整数部分除以8,余数为该位权上的数,而商继续除以8,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。

将十进制的(796)D转换为八进制的步骤如下:

  1. 将 796 除以 8,商 99 余数为 4;
  2. 将 99 除以 8,商 12 余数为 3;
  3. 将 12 除以 8,商 1 余数为 4;
  4. 将 1 除以 8 ,商 0 余数为 1;
  5. 读数,因为最后一位是经过多次除以8才得到的,因此它是最高位,读数字从最后的余数向前读,1434,即(796)D=(1434)O。

十进制 → 十六进制

除16取余法,即每次将整数部分除以16,余数为该位权上的数,而商继续除以16,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。

将十进制的(796)D转换为十六进制的步骤如下:

  1. 将 796 除以 16,商 49 余数为 12,对应十六进制的C
  2. 将 49 除以 16,商 3 余数为 1
  3. 将3 除以 16,商 0 余数为 3
  4. 读数:因为最后一位是经过多次除以16才得到的,因此它是最高位,读数字从最后的余数向前读,31C,即(796)D=(31C)H。

Untitled

⭐️ 代码转换

十进制 → n进制 toString

使用 toString 方法:

function decimalToBaseN(decimalNumber, base) {
    if (base < 2 || base > 36) {
        throw new Error("Base must be between 2 and 36");
    }

    return decimalNumber.toString(base);
}

// 示例:将十进制数 123 转换为二进制
console.log(decimalToBaseN(123, 2)); // 输出: "1111011"
// 示例:将十进制数 123 转换为十六进制
console.log(decimalToBaseN(123, 16)); // 输出: "7b"

n进制 → 十进制 parseInt

使用 parseInt 方法:

function baseNToDecimal(baseNNumber, base) {
    if (base < 2 || base > 36) {
        throw new Error("Base must be between 2 and 36");
    }

    return parseInt(baseNNumber, base);
}

// 示例:将二进制数 "1111011" 转换为十进制
console.log(baseNToDecimal("1111011", 2)); // 输出: 123
// 示例:将十六进制数 "7b" 转换为十进制
console.log(baseNToDecimal("7b", 16)); // 输出: 123

⭐️ 如何记忆进制转换的方法

联想平常颜色的十六进制 #00ff00 是包含字母的

所以如果是想 n 进制转十进制,那么这个 n 就有可能包含字母,包含字母就得是字符串去转数字,那么就是 parseInt() 方法,因为它接收的第一个参数是字符串。

反过来如果是十进制转 n 进制,那么就得用 toString 了,因为转换后的进制不一定是个数字

资源

八、十、十六进制转换(图解篇)