根据数字(JS)设置位数

时间:2019-01-18 13:25:03

标签: javascript

我正在编写一个简单的IP计算器,并且我需要JavaScript中的某个功能,所以我无法解决。

基于十进制数字,它将创建一个位数等于该数字的数字。

例如-数字3将创建0000 0111,数字7将创建0111 1111,依此类推。

3 个答案:

答案 0 :(得分:1)

由于您有前导零,所以我假设结果将用作字符串。您可以为此滥用Array.fill()

function createSequence( ones, total ) {
  // create an array of the correct size
  return (new Array( total ))
  // add the zeros at the start
           .fill( 0, 0, total - ones )
  // add the ones at the end
           .fill( 1, total - ones )
  // stitch it all together
           .join( '' );
}

createSequence( 3, 8 );
// > "00000111"

createSequence( 7, 8 );
// > "01111111"

答案 1 :(得分:1)

您还可以使用以下代码:

function createSequence( ones, total ) {
  var result = (2**total + 2**ones - 1).toString(2).slice(1);
  console.log(result)
  return result;
}

createSequence( 3, 8 );
createSequence( 7, 8 )

说明:

2**total的二进制表示形式是1,total乘以0(对于total=8 100000000)

2**ones - 1的二进制表示形式是重复1 ones次(对于ones=3 111)

如果将这些数字相加,则必须删除前导1

注意:如果您的浏览器不支持**运算符,则可以使用移位:

function createSequence( ones, total ) {
  var result = ((1<<total) + (1<<ones) - 1).toString(2).slice(1);
  console.log(result)
  return result;
}

createSequence( 3, 8 );
createSequence( 7, 8 )

答案 2 :(得分:0)

伪代码:

    NumberToBits(int x) {
    var answer = 2^x;
    if(x > 1)
        return answer + NumberToBits(x-1);
    }