如何从二进制int中获取百分比,每个位代表x%?

时间:2015-04-01 16:40:00

标签: javascript bit-manipulation

我有一个10位的二进制位图。每一位代表10%。是否有任何简单的数学函数可以从位图中获得百分比之和?

样品

0000000000 = 0%

0000000001 = 10%
1000000000 = 10%
0000100000 = 10%

1000000001 = 20%
0000000011 = 20%
0000110000 = 20%
0010000010 = 20%

1010000010 = 30%

请注意,这只是位激活方式的一个示例。我实际上是一个int,例如0,1到1023。

4 个答案:

答案 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得到它的百分比:

&#13;
&#13;
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;
&#13;
&#13;

答案 3 :(得分:0)

尝试做类似

的事情
x = '0000100011';

function binTopre(x) {
  c = (x.match(/1/g)||[]).length;
  return (c*10) + '%';
}

 console.log(binTopre(x));//30%