gpt4 book ai didi

c - 位操作 C allEvenBits

转载 作者:行者123 更新时间:2023-11-30 15:24:58 25 4
gpt4 key购买 nike

我必须使用按位操作来完成某些事情。这就是这个问题问我的问题:

/* 
* allEvenBits - return 1 if all even-numbered bits in word set to 1
* Examples allEvenBits(0xFFFFFFFE) = 0, allEvenBits(0x55555555) = 1
* Legal ops: ! ~ & ^ | + << >>
* Max ops: 12
* Rating: 2
*/

这是我已经解决的:

int allEvenBits(int x) {
int y, z, p, q, r, s, t, u, k;
y=x;
z=y&0x5555;
y>>16;
p=y&z;
q=p&0x055;
p>>8;
r=q&p;
s=r&0x05;
r>>4;
t=s&r;
u=t&0x01;
t>>2;
k=u&t;
return k;
}

但是每次我运行它来测试该函数是否适用于 32 位整数的所有可能值时,我都会收到以下错误消息:

ERROR: Test allEvenBits(-2147483647[0x80000001]) failed...

...Gives 1[0x1]. Should be 0[0x0]

即使我在每个阶段对所有偶数位进行 AND 运算,所以当最终操作产生 0 时,我也无法让函数返回 1。我尝试使用较小的 8 位数字进行数学运算类似的形式,它给出了正确的答案,所以我不明白这个实现出了什么问题。

最佳答案

您的陈述例如

y>>16;

缺少=符号,因此没有效果,请尝试

y>>=16;
...
p>>=8;
...
r>>=4;
...
t>>=2;

此外,按照 @abligh 的建议声明为 unsigned int

关于c - 位操作 C allEvenBits,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28140540/

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