我正在编写一个简单的IP计算器,并且我需要JavaScript中的某个功能,所以我无法解决。
基于十进制数字,它将创建一个位数等于该数字的数字。
例如-数字3将创建0000 0111,数字7将创建0111 1111,依此类推。
答案 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);
}