JavaScript计算位1的个数(汉明重量)代码运行结果异常问题排查
代码存在的错误
count变量放在for循环内部初始化,每次循环都会被重置为0,无法累计所有1的位数mask变量放在for循环内部初始化,每次循环都重置为1,永远只会校验最低位,无法遍历高位mask <<= 1移位操作写在if判断分支内,只有当前校验位是1的时候才会移位,否则mask永远保持为1,不会继续校验后续位- return语句放在for循环内部,第一次循环执行结束就直接返回结果,32位仅校验了最低位就终止了函数执行
- 循环变量i未显式声明,会被挂载为全局变量,存在变量污染风险
修正后的代码
var hammingWeight = function(n) { let count = 0; let mask = 1; for (let i = 0; i < 32; i++) { if ((mask & n) != 0 ) { count++; } mask <<= 1; } return count; };
内容的提问来源于stack exchange,提问作者SelfTaughtLooking4Job
相关产品推荐
相关产品推荐

