gpt4 book ai didi

java - 计算长数中设置的位数

转载 作者:行者123 更新时间:2023-12-01 16:25:53 29 4
gpt4 key购买 nike

此问题已得到解答here .

我的疑问是,以下方法 1 有效,但它的变体,即方法 2 无效,而是给出了预期输出值的两倍。我找不到原因。

方法1

public class Solution {
public int numSetBits(long a) {
int count = 0;
long temp = 0;
for(int i = 0 ; i < 64 ; i++) { // 64-bit for long data-type
temp = 1;
temp = temp << i;
temp = a & temp;
if((temp > 0))
count++;
}
return count;
}
}

方法2

public class Solution {
public int numSetBits(long a) {
int count=0;
for(int i=0; i<64; i++) {
if((a & (1 << i))>0) count++;
}
return count;
}
}

最佳答案

第二种方法失败,因为 1 << i 的结果是 int ,不是long 。因此位掩码会环绕,因此 a 的低 32 位被扫描两次,而 a 的高 32 位没有被计算在内。

所以,当 i达到值 32,(1 << i)不会是 232,而是 20(即 1),与 i 时相同为 0。类似地,当 i 时33,(1 << i)不会是 233,而是 21,...等等

通过将常数 1 设置为 long 来纠正此问题:

(1L << i)

关于java - 计算长数中设置的位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59991296/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com