gpt4 book ai didi

有条件地使用位运算符

转载 作者:太空狗 更新时间:2023-10-29 15:11:08 25 4
gpt4 key购买 nike

如何使用按位运算符表示条件运算符?

这是一道作业题,我必须只使用按位运算来实现条件运算符。如果 if 会很简单语句是允许的,但是它必须是严格的按位运算符。

只有运算符! , ~ , & , ^ , | , + , >> , 和 <<可以使用。没有 if可以使用语句或循环。

该函数采用三个整数,并且像普通条件运算符一样工作。第一个参数被评估为零或非零。如果第一个参数为零,则返回第二个参数。如果第一个参数不为零,则返回第三个参数。

我希望对此有一个简单的算法。关于从哪里开始的任何想法都会有很大帮助。

最佳答案

是否允许移位作为位运算符?是否允许算术运算符?

您的编辑并不完全清楚,但我认为您需要实现等同于

a ? b : c

哪里a , bc是整数。这又等同于

a != 0 ? b : c

实现这一目标的一种方法是找到一种方法将 a 变为非零值。仅使用按位运算符转换为全 1 位模式。如果我们弄清楚如何做到这一点,剩下的就很容易了。现在,我不记得有什么巧妙的技巧可以做到这一点(我相信它们确实存在),而且我不确定哪些运算符是允许的,哪些不是,所以现在我将只使用类似

a |= a >> 1; a |= a >> 2; a |= a >> 4; a |= a >> 8; a |= a >> 16;
a |= a << 1; a |= a << 2; a |= a << 4; a |= a << 8; a |= a << 16;

对于 32 位整数类型,如果(且仅当)原始 a 中至少设置了一位,上面的结果应该是 a 的所有位设置为 1。(假设我们正在使用无符号整数,以避免与移动有符号值相关的问题)。同样,我敢肯定,必须有一种更聪明的方法来做到这一点。例如:a = !a - 1 , 但我不知道 !-是允许的。

一旦我们这样做了,原来的条件运算符就等同于

(a & b) | (~a & c)

完成。

关于有条件地使用位运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3798601/

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