2015-04-01 93 views
0

我有一个10位的二进制位图。每一位代表10%。有没有简单的数学函数来从位图中获取百分比的总和?如何从二进制int中获得百分比,每一位代表x百分比?

样品

0000000000 = 0% 

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

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

1010000010 = 30% 

要知道这只是位是如何激活的例子。其实,我的号码是一个整数,如0,1〜1023

+0

所以你只想计数所设置的位数? – Barmar 2015-04-01 16:42:14

+0

请参阅http://en.wikipedia.org/wiki/Hamming_weight – dave 2015-04-01 16:49:14

回答

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

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

0

尝试做这样的事情

x = '0000100011'; 

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

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