如何在JavaScript中计算整数中的1位

时间:2018-08-24 15:01:20

标签: javascript binary bit

如何计算整数1位的数量。

所以说您有二进制数字ID A B 1 0.2 0.8 2 0 0 3 0.25 0.75 4 0 0 。基本上,开头有3个布尔值标志。与此对应的十进制表示法是11100000。想知道如何获取该整数并以某种方式遍历该整数以增加其开头的1数。像这样:

224

我从来没有真正处理过位,因此不确定如何以最佳方式(即不将其转换为字符串var int = 224 var n = 8 var i = 0 var total = 0 while (i++ < n) { if (int.getBitAt(i) == 1) { total++ } else { break } } 或其他非最佳方式)来完成此操作。

3 个答案:

答案 0 :(得分:1)

获得这种结果的最简单方法是使用按位运算符。基本上:

var int = 224
var n = 8
var i = 0
var total = 0
while (i++ < n) {
  var mask = 1 << i
  if ( (mask & int) == (mask)) {
    total++
  }
}

基本上mask是一个变量,在一个位置为1,在所有其他位置为0,例如0001000,其高位在i位置。

mask & int如果int的i位为0,则全部为零;如果为1,则等于mask。

编辑:我在控制台上做了一些尝试。首先,我摆脱了中断,然后在if语句中添加了一些括号。数字的表示形式可能存在一些问题,使得该陈述不成立。

答案 1 :(得分:1)

这是另一个使用位旋转的任意位长解决方案:

function countBits(num){
    var idx=Math.floor(Math.log2(num)); //Get the number of bits needed to represent your number
    var bit=1;
    var count=0;
    while (bit){
        bit=(num & (1<<idx))>>idx; //Check the bit value in the given position
        count+=bit; //Add it to the count
        idx-=1; //Check the next bit over
    }
    return count;
}

答案 2 :(得分:0)

对任意位长度的数字执行此操作的方法可能类似于:

function countBits(num){
    var s=num.toString(2); //Converts the number to a binary string
    if (s[0]==='0'){return 0;} //If the first digit is 0, return 0
    return s.split('0')[0].length; //Otherwise, return the number of 1s at the start
}