在 JavaScript 中将数字转换为二进制格式
将数字转换为二进制是一个相当复杂的过程。如果我们坐下来手动转换数字,结果很容易出错。我们如何将数字更改为二进制格式?JavaScript 没有很多内置函数可以这样做。我们将介绍如何在 JavaScript 中将数字转换为二进制。
在 JavaScript 中创建一个将数字转换为二进制的函数
在进入代码之前,我们需要了解从十进制数(基数为 10)到二进制数(基数为 2)的转换过程。为简单起见,我们将在本文中介绍正整数的转换。因此,负整数和浮点数的变化超出了本文的范围。
了解转换过程
给定一个整数(或 JavaScript 数字),我们不断将数字除以 2 并捕获其余数,直到数字小于 2。例如,如果我们有一个数字 25,继续将 25
除以 2
直到我们得到商小于 2。
除数 | 商 | 余 | 位 |
---|---|---|---|
25 / 2 | 12 | 1 | 0 |
12 / 2 | 6 | 0 | 1 |
6 / 2 | 3 | 0 | 2 |
3 / 2 | 1 | 1 | 3 |
1 / 2 | 0 | 1 | 4 |
我们从高到低读取数字。因此,数字 25 的二进制值是 1101。
我们使用以下一组计算来确认二进制值是否代表正确的十进制数。二进制数中表示的每个位都乘以 2
,为位位置值(从 0 开始)提供动力。
= 2^4*(1) + 2^3*(1) + 2^2*(0) + 2^1*(0) + 2^0*(1)
= 16 + 8 + 0 + 0 + 1
= 25
将数字转换为二进制格式的 JavaScript 代码
我们在上面讨论的方法上构建以下代码。函数 convertToBinary1
控制作为参数传递的十进制数的二进制等价物。请注意,我们向后读取结果。因此,在考虑所有上述因素的情况下创建了代码。
使用迭代
function convertToBinary1(number) {
let num = number;
let binary = (num % 2).toString();
for (; num > 1;) {
num = parseInt(num / 2);
binary = (num % 2) + (binary);
}
console.log(binary);
}
window.onload = function() {
console.log(convertToBinary1(25));
console.log(convertToBinary1(8));
}
输出:
11001
1000
脚步
-
复制传递给函数的参数并将其存储在临时变量
num
中。 -
创建一个变量来存储二进制位。它本质上是字符串类型,以便于处理。
-
开始迭代以生成二进制位并让它继续直到数字不再能被 2 整除。
在每次迭代中,我们将数字除以
2
以获得商。我们计算商的模
。此步骤将二进制位生成为数字的模数,其中 2 生成二进制位0
或1
。 -
将由
modulous
值生成的二进制位附加到保存每次迭代中生成的二进制位的二进制变量中。 -
一旦数字不再能被
2
整除(检查条件(num / 2)> 1),迭代停止。 -
在最后一步,我们将结果记录到控制台。因此,我们得到作为参数传递给该函数的十进制数的二进制等效项。
使用递归
我们可以使用递归方法将十进制位转换为二进制位。这种方法需要更少的代码行,但需要更多的思考。当数字不再能被 2 整除时,递归停止,并不断调用自己,直到达到突破条件。递归很优雅,但与简单迭代方法相比,函数调用堆栈消耗更多内存。
function convertToBinary(number, bin) {
if (number > 0) {
return convertToBinary(parseInt(number / 2)) + (number % 2)
};
return '';
}
window.onload = function() {
console.log(convertToBinary(25));
console.log(convertToBinary(8));
}
输出:
11001
1000
使用 toString(2)
函数将数字转换为二进制
toString()
函数对于将数字转换为字符串非常熟悉。但是,我们也可以使用它来将数字转换为其二进制格式。通常,它与 Number
对象一起使用以将数字转换为二进制格式。javascript 的 toString(2)
函数在用于数字对象时,返回数值的二进制等效项,如下面的示例所示。该方法将基数值作为输入。因此,我们可以使用它来将给定的数字转换为其他基本系统(如 16 的基数(十六进制)和 8 的基数(八进制))。
(8).toString(2)(25).toString(2)(235).toString(2)
输出:
"1000"
"11001"
"11101011"
请注意,toString(2)
方法的返回类型仍然是字符串。因此,它将数字转换为字符串格式的二进制位。