我提供了二进制文件,例如01001
,并希望获得第1位的位置,因此我希望它会返回[0, 3]
。
javascript是否提供任何功能来获取第1位的所有位置?
答案 0 :(得分:1)
如果是数字,请先将其转换为字符串,如果是字符串则可以:
positionArray = [];
binary.split('');
for (i = 0; i < binary.length; i++){
if (binary[i] == "1"){
positionArray.push(i);
}
}
return positionArray;
我实际上在做的是将字符串转换为字符的数组(或数字到字符串到数组),然后遍历每个条目以找到每个'1'的位置。
不确定你是否可以用数字这样做,这就是我建议事先将它转换为字符串的原因。这只是一个粗略的解决方案,我打赌有更好的方法,但希望它有所帮助。
答案 1 :(得分:1)
function get_idxs(x) {
var arr = [];
var idx = 0;
while (x) {
if (x & 1) {
arr.push(idx);
}
idx++;
x >>= 1;
}
return arr;
}
> get_idxs(0b1001);
[0, 3]
警告:它不适用于负数。不幸的是,对于负数,问题的答案取决于底层的cpu架构。
答案 2 :(得分:1)
MDN有一段有用的代码,可以在数字上运行,并且会使用9或二进制0b1001
这样的数字,并返回一个具有true / false值的数组,具体取决于是否在输入值。对于1001,它返回[true, false, false, true]
然后,您可以通过检查哪些索引为true并获取[0,3]
MDN代码段在这里:
这里有一个使用它的简单例子: