我有一个作业要求仅使用这些运算符来执行许多功能:! 〜&^ | + >在某些问题中,使某个整数x(如果包含任何1)变为全1,但如果为0则保持为0是有用的。之所以这样做,是因为我可以这样返回y或z:// One of the two conditional values is now 0int 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 1sint 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)分别获得-1和0。关于c - 有效地使一个int具有1的全1,但一个为0的int保持0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14656299/
10-13 06:18