如何计算一个整数中 1 的位数。
假设你有二进制数11100000
。基本上开头有 3 个布尔标志。相应的十进制表示法是224
。想知道如何获取该整数并以某种方式循环它以添加它开头的 1 的数量。像这样的事情:
var int = 224
var n = 8
var i = 0
var total = 0
while (i++ < n) {
if (int.getBitAt(i) == 1) {
total++
} else {
break
}
}
我从来没有真正处理过位,所以不确定如何以最佳方式实现这一点(即不将其转换为字符串'11100000'
或其他非最佳方式。
获得这种结果的最简单方法是使用按位运算符。基本上:
var num = 224
var n = 8
var i = 0
var total = 0
while (i++ < n) {
var mask = 1 << i
if ( (mask & num) == (mask)) {
total++
}
}
基本上mask
是一个变量,在某个地方为 1,在其他地方为 0,例如0001000
与高位在i
位置。
mask & int
全部为零,如果i
int的bit为0,为1则等于mask。
编辑:我在控制台上进行了一些尝试。首先,我去掉了break,然后在if语句中添加了一些括号。数字表示可能存在一些问题,导致该陈述不可能成立。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)