我正在尝试编写一个简短的代码来计算整数的 Hemming 权重,
class Solution {
public:
int hammingWeight(int n) {
if(n==0){
return 0;
}else{
int a=1;
while(a<=(float)n/2){
a*=2;
}
return 1+hammingWeight(n-a);
}
}
};
然而,对于 n=2147483645,它给出了错误:
Line 9: Char 18: runtime error: signed integer overflow: 1073741824 * 2 cannot be represented in type 'int' (solution.cpp)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior solution.cpp:9:18
我不明白为什么,在我的计算中我从来不需要做 1073741824 * 2。另外,如果a<=(float)n/2
我不做 而是做 ,我的代码也能正常工作a<=n/2
。