如何在javascript中生成每个X长度的位掩码
我想创建一个X长度的位掩码数组,并寻找一个有效的函数 对于长度3,我希望它生成:如何在javascript中生成每个X长度的位掩码,javascript,bit-manipulation,bitmask,Javascript,Bit Manipulation,Bitmask,我想创建一个X长度的位掩码数组,并寻找一个有效的函数 对于长度3,我希望它生成: 000, 001, 010, 011, 100, 101, 110, 111 我正在寻找一个解决方案,使用位数学来做到这一点-现在我只是使用常规for循环,因为我的位操作是基本的 就是这样: var length = 3, limit = 1 << length; //Shift length bytes to the left for(mask=0; mask < limit; m
000, 001, 010, 011, 100, 101, 110, 111
我正在寻找一个解决方案,使用位数学来做到这一点-现在我只是使用常规for循环,因为我的位操作是基本的 就是这样:
var length = 3,
limit = 1 << length; //Shift length bytes to the left
for(mask=0; mask < limit; mask++){
console.log(mask); //This will log in decimal, but the bin value is correct
}
var长度=3,
limit=1您是否尝试了以下方法:
function range(til) {
var x = 0, xs = [];
while (x < til) xs.push(x++);
return xs;
}
function generate(n) {
return range(Math.pow(2, n));
}
如果需要字符串格式,请使用以下函数:
function replicate(n, x) {
var i = 0, xs = [];
while(i++ < n) xs.push(x);
return xs;
}
function generateBitmasks(n) {
var padding = replicate(n, '0').join('');
return range(Math.pow(2, n)).map(function (x) {
return (padding + x.toString(2)).slice(-n);
});
}
我希望这会有所帮助。这是来自沙阿的相同想法,与埃德加·维莱加斯·阿尔瓦多的合并
// Pad with left 0's
function pad(val, width) {
val = val + '';
return val.length >= width ? val : new Array(width - n.length + 1).join('0') + val;
}
// Get a list of decimal numbers representing all the bitmasks up to the given length
function getBitmapDecimalList(length) {
var bitmaskMax = 1 << length;
var bitmaskList = [];
for (var i = 0; i < bitmaskMax; i++) {
bitmaskList.push(i);
}
return bitmaskList;
}
// Get a list of strings representing all the bitmasks up to the given length
function getBitmapBinaryList(length) {
var bitmaskMax = 1 << length; // Shift operator, equivalent to Math.pow(2,length)
var bitmaskList = [];
for (var i = 0; i < bitmaskMax; i++) {
// the `.toString(2)` is what transforms the number into a binary string
var bitmaskBinary = Number(i).toString(2);
var paddedBitmask = pad(bitmaskBinary, length);
bitmaskList.push(paddedBitmask);
}
return bitmaskList;
}
//用左0填充
功能板(val,宽度){
val=val+'';
return val.length>=width?val:新数组(width-n.length+1)。join('0')+val;
}
//获取表示给定长度内所有位掩码的十进制数列表
函数getBitmapDecimalList(长度){
var bitmaskMax=1这只是0到2^n之间的数字-1@Barmar是的,我显然想得太多了:)
var bitmasks = generateBitmasks(3);
// Pad with left 0's
function pad(val, width) {
val = val + '';
return val.length >= width ? val : new Array(width - n.length + 1).join('0') + val;
}
// Get a list of decimal numbers representing all the bitmasks up to the given length
function getBitmapDecimalList(length) {
var bitmaskMax = 1 << length;
var bitmaskList = [];
for (var i = 0; i < bitmaskMax; i++) {
bitmaskList.push(i);
}
return bitmaskList;
}
// Get a list of strings representing all the bitmasks up to the given length
function getBitmapBinaryList(length) {
var bitmaskMax = 1 << length; // Shift operator, equivalent to Math.pow(2,length)
var bitmaskList = [];
for (var i = 0; i < bitmaskMax; i++) {
// the `.toString(2)` is what transforms the number into a binary string
var bitmaskBinary = Number(i).toString(2);
var paddedBitmask = pad(bitmaskBinary, length);
bitmaskList.push(paddedBitmask);
}
return bitmaskList;
}