我有一个作业要求仅使用这些运算符执行许多功能:
!~ & ^ | + << >>
在某些问题中,如果某个整数 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。
编辑:如果语句不是一个选项