gpt4 book ai didi

c - 如何在 C 中使用按位和逻辑运算符将无符号数乘以四

转载 作者:行者123 更新时间:2023-11-30 20:48:39 24 4
gpt4 key购买 nike

目标:

4x ( 4.400000095 ) = 17.60000038
  • Legal ops: Any integer/unsigned operations incl. ||, &&. also if, while
  • Max ops: 30
  • Return bit-level equivalent of expression x + x + x + x for
  • floating point argument f.

我的代码:

unsigned 4x(unsigned uf) {
unsigned expn = (uf >> 23) & 0xFF;
unsigned sign = uf & 0x80000000;
unsigned frac = uf & 0x007FFFFF;
if (expn == 255 || (expn == 0 && frac == 0))
return uf;
if (expn) {
expn << 2;
} else if (frac == 0x7FFFFF) {
frac >> 2;
expn << 2;
} else {
frac <<= 2;
}

return (sign) | (expn << 23) | (frac);

}

正如您所猜到的,我的代码不起作用。输入不是四倍,而是双倍。我不知道为什么,因为分数和指数总是右/左移 2 而不是 1。我在 32 位机器中使用单精度浮点值。

最佳答案

请注意

expn << 2;

不修改expn。您可能想要

expn <<= 2;

同上

frac >> 2;
expn << 2;

但是,正如 @chux 所指出的,您只需要在指数上加 2,而不是将指数乘以 4。

关于c - 如何在 C 中使用按位和逻辑运算符将无符号数乘以四,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35168306/

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