试图在数组中找到 3 个项目的二进制文件。获取无限循环
Trying to find the binary of 3 items in array. Getting infinite loop
这是我所做的。使用For循环遍历所有元素,然后通过递归和return
找到二进制
var temp3 = [57,80,95];
var temp2 = [];
var temp4 = '';
var r;
for(i=0;i<temp3.length;i++) {
var r = temp3[i];
temp2.push(binary(r));
}
function binary(r) {
console.log(r);
if (r === 0) return r;
temp3 = (r % 2) + temp3;
binary(Math.floor(r / 2));
return temp3;
}
//1100010
console.log(temp2);
二元函数的正确写法是这样的 -
function binary(r, i = 0) {
console.log(r);
if (r === 0) return r;
return (r % 2) * Math.pow(10, i) + binary(Math.floor(r / 2), i + 1);
}
尽管有很多方法可以将整数转换为二进制,但我觉得这是最简单的方法之一。并且,如果您需要进一步的解释或澄清,请在下方评论。
您可以使用按位运算符和递归轻松地将数字转换为 binary
-
const binary = x =>
x < 2
? String(x)
: binary(x >> 1) + String(x & 1)
console.log(binary(57)) // 111001
console.log(binary(58)) // 111010
console.log(binary(80)) // 1010000
console.log(binary(95)) // 1011111
console.log(binary(1234567)) // 100101101011010000111
console.log(binary(12345678)) // 101111000110000101001110
如果您希望结果为数字而不是字符串,我们也可以这样做。第二种技术有局限性,因为 JavaScript 的数字很快就会溢出 -
const binary = n =>
n == 0
? 0
: 10 * binary (n >> 1) + (n & 1)
console.log(binary(57)) // 111001
console.log(binary(58)) // 111010
console.log(binary(80)) // 1010000
console.log(binary(95)) // 1011111
console.log(binary(1234567)) // 100101101011010000000 <- wrong
console.log(binary(12345678)) // 1.0111100011000008e+23 <- imprecise
这是我所做的。使用For循环遍历所有元素,然后通过递归和return
找到二进制var temp3 = [57,80,95];
var temp2 = [];
var temp4 = '';
var r;
for(i=0;i<temp3.length;i++) {
var r = temp3[i];
temp2.push(binary(r));
}
function binary(r) {
console.log(r);
if (r === 0) return r;
temp3 = (r % 2) + temp3;
binary(Math.floor(r / 2));
return temp3;
}
//1100010
console.log(temp2);
二元函数的正确写法是这样的 -
function binary(r, i = 0) {
console.log(r);
if (r === 0) return r;
return (r % 2) * Math.pow(10, i) + binary(Math.floor(r / 2), i + 1);
}
尽管有很多方法可以将整数转换为二进制,但我觉得这是最简单的方法之一。并且,如果您需要进一步的解释或澄清,请在下方评论。
您可以使用按位运算符和递归轻松地将数字转换为 binary
-
const binary = x =>
x < 2
? String(x)
: binary(x >> 1) + String(x & 1)
console.log(binary(57)) // 111001
console.log(binary(58)) // 111010
console.log(binary(80)) // 1010000
console.log(binary(95)) // 1011111
console.log(binary(1234567)) // 100101101011010000111
console.log(binary(12345678)) // 101111000110000101001110
如果您希望结果为数字而不是字符串,我们也可以这样做。第二种技术有局限性,因为 JavaScript 的数字很快就会溢出 -
const binary = n =>
n == 0
? 0
: 10 * binary (n >> 1) + (n & 1)
console.log(binary(57)) // 111001
console.log(binary(58)) // 111010
console.log(binary(80)) // 1010000
console.log(binary(95)) // 1011111
console.log(binary(1234567)) // 100101101011010000000 <- wrong
console.log(binary(12345678)) // 1.0111100011000008e+23 <- imprecise