题目描述: 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为 汉明重量).
分析:
循环检查二进制位法,当检查第 i位时,我们可以让 n 与 2^i 进行与运算,当且仅当 n 的第 i 位为 1 时,运算结果不为 0。
位运算法,n & (n−1)会将n 的最右边的那个1变成0,直到n 等于0,运算次数就等于 n 的二进制位中 1 的个数。
求解:
// 位运算优化法
function hammingWeight1(n: number): number {
let count = 0;
while (n !== 0) {
// n & n - 1的按位与会将最右边的那个 1 变为0
n = n & (n - 1);
count = count + 1;
}
return count;
}
// 循环检查二进制位法
function hammingWeight2(n: number): number {
let count = 0;
for (let i = 0; i < 32; i++) {
if ((n & (1 << i)) !== 0) {
// 和 2^i 进行与运算,不等于 0 说明该位置是 1
count = count + 1;
}
}
return count;
}
计算无符号整数二进制中1的个数
文章介绍了如何通过位运算优化法和循环检查二进制位法来计算一个无符号整数(以二进制串形式表示)的汉明重量,即二进制表达中数字1的个数。两种方法分别通过n&(n-1)和与2^i运算来判断和统计1的个数。
1322

被折叠的 条评论
为什么被折叠?



