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

How to get percent from an binary int, with every bit representing x percent?

本文关键字:表示 百分比 获取 二进制 int      更新时间:2023-09-26

我有一个10位的二进制位图。每一位代表10%。有没有简单的数学函数可以从位图中得到百分比的总和?

样品

0000000000 = 0%
0000000001 = 10%
1000000000 = 10%
0000100000 = 10%
1000000001 = 20%
0000000011 = 20%
0000110000 = 20%
0010000010 = 20%
1010000010 = 30%

请注意,这只是如何激活位的一个示例。我的数字实际上是一个整数,比如0,1到1023。

您不必使用循环。你不必做数学。就这样做吧:

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 + "%");

使用循环:

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;

你可以用这样的函数计算比特,然后乘以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 + '%');

尝试做一些类似的事情

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