如何在JavaScript中将整数转换为二进制?

2022-08-29 23:16:30

我想在二进制中看到整数,正数或负数。

更像是这个问题,但对于JavaScript来说。


答案 1

function dec2bin(dec) {
  return (dec >>> 0).toString(2);
}

console.log(dec2bin(1)); // 1
console.log(dec2bin(-1)); // 11111111111111111111111111111111
console.log(dec2bin(256)); // 100000000
console.log(dec2bin(-256)); // 11111111111111111111111100000000

你可以使用 Number.toString(2) 函数, 但是在表示负数时它有一些问题。例如,输出为 。(-1).toString(2)"-1"

若要解决此问题,可以使用无符号右移位按位运算符 (>>>) 将数字强制转换为无符号整数。

如果运行,则会将数字 0 位向右移动,这不会更改数字本身,但它将表示为无符号整数。上面的代码将正确输出。(-1 >>> 0).toString(2)"11111111111111111111111111111111"

这个问题有进一步的解释。

-3 >>> 0(右逻辑移位)将其参数强制为无符号整数,这就是为什么你得到32位二进制的补码表示-3。


答案 2

尝试

num.toString(2);

2 是基数,可以是 2 到 36 之间的任何基数

来源在这里

更新:

这只适用于正数,Javascript在二进制补码表示法中表示负二进制整数。我做了这个小函数,应该可以做到这一点,我还没有正确地测试它:

function dec2Bin(dec)
{
    if(dec >= 0) {
        return dec.toString(2);
    }
    else {
        /* Here you could represent the number in 2s compliment but this is not what 
           JS uses as its not sure how many bits are in your number range. There are 
           some suggestions https://stackoverflow.com/questions/10936600/javascript-decimal-to-binary-64-bit 
        */
        return (~dec).toString(2);
    }
}

从这里得到了一些帮助