gpt4 book ai didi

c - C中的按位运算符下面的概念是什么?它优化了我的代码并大大减少了运行时间

转载 作者:行者123 更新时间:2023-11-30 18:40:34 25 4
gpt4 key购买 nike

for(idx = 63; idx >= 0; idx--){ 
if((num & (1ll<<idx)) != 0)
return 1ll << idx;
}

它极大地优化了我的代码。早些时候我有下面给出的代码。谁能帮我解释一下这种巨大变化的原因吗?

int i,j;
for(i=63;i>=0;i--){
if(num & (1<<i)){
break;
}
}
num &= 0;
num |= (1<<i);
return num;

最佳答案

有两个主要区别。首先,在原始代码中存在错误。基本上,您在这里所做的就是寻找 64 位数字中的最高设置位。当你运行 1 << i 时,你总是会得到一个零,直到 i 低于 32。当你将其更改为 1ll 时,它会被转换为 long long,因此 1ll << i 会为 i 生成一个非 0 的数字> 32.第二个区别是返回数字时保存的&和shift。

顺便说一句,你可以在没有 while 循环的情况下完成整个事情(至少使用 GCC)。只要这样做:

return 1ll << (64 - __builtin_clzll(num))

关于c - C中的按位运算符下面的概念是什么?它优化了我的代码并大大减少了运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25764917/

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