我有一个10位的二进制位图。每一位代表10%。是否有任何简单的数学函数可以从位图中获得百分比之和?
样品
0000000000 = 0%
0000000001 = 10%
1000000000 = 10%
0000100000 = 10%
1000000001 = 20%
0000000011 = 20%
0000110000 = 20%
0010000010 = 20%
1010000010 = 30%
请注意,这只是位激活方式的一个示例。我实际上是一个int,例如0,1到1023。
答案 0 :(得分:2)
您不必使用循环。你不必做数学。就这样做:
var number = 1000100010;
alert(number.toString().split("1").length - 1);
//A little more deep:
var number2 = 1100100000;
alert((number2.toString().split("1").length - 1) * 10 + "%");
答案 1 :(得分:0)
使用循环:
function count_1bits(n, bitsize) {
var count = 0;
for (var i = 0; i < bitsize; i++) {
count += (n & 1); // test low-order bit
n >>= 1; // shift number down 1 bit
}
return count;
}
var pct = count_1bits(bitmap, 10)*100;
答案 2 :(得分:0)
您可以使用这样的函数计算位数,然后乘以10得到它的百分比:
function countBits(n, cnt) {
if (cnt == 1) return n & 1;
var half = Math.floor(cnt / 2);
return countBits(n >> half, cnt - half) + countBits(n, half);
}
n = 1023;
document.write(countBits(n, 10) * 10 + '%');
&#13;
答案 3 :(得分:0)
尝试做类似
的事情x = '0000100011';
function binTopre(x) {
c = (x.match(/1/g)||[]).length;
return (c*10) + '%';
}
console.log(binTopre(x));//30%