gpt4 book ai didi

c - 有效地使一个 1 全为 1 但为 0 的 int 保持为 0

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

我有一个作业要求仅使用这些运算符来执行许多功能:

! ~ & ^ | + << >>

在某些问题中,使一些整数 x 如果包含任何 1 则变为全 1 但如果它为 0 则保持为 0 是有用的。我这样做的原因是这样我可以像这样返回 y 或 z:

// One of the two conditional values is now 0
int conditionalA = mask&y;
int conditionalB = ~mask&z;

// One of the values is combined with 0 using |
int out = conditionalA|conditionalB;

return out;

我在哪里制作这样的面具:

// Make any x other than 0 all 1s
int mask = x;
mask |= mask>>1;
mask |= mask>>2;
mask |= mask>>4;
mask |= mask>>8;
mask |= mask>>16;

mask |= mask<<1;
mask |= mask<<2;
mask |= mask<<4;
mask |= mask<<8;
mask |= mask<<16;

必须有更好的方法来使掩码全部为 1 或 0,但我想不出更有效的解决方案。同样,重要的是,如果 x 为 0,则 0 仍为 0。

编辑:如果语句不是一个选项

最佳答案

假设 2 的补码:

int mask = !x + ~0;

! 将任何非零值映射到 0 并将 0 映射到 1,然后我们添加 ~0 (-1) 分别得到-10

关于c - 有效地使一个 1 全为 1 但为 0 的 int 保持为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14656299/

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