我想知道如何将所有位设置为1或0取决于原始数字(带符号的整数是安全的)。例如,
int filter = !!number; //return either 1 or zero and I would like to set all bits of filter to either one or zero depends on filter.
我只想使用这些运算符(!〜&^ | + << >>)来设置'filter'的所有位
我将非常感谢您的帮助。
答案 0 :(得分:3)
假设2对整数表示的称赞:
int filter = number ?-1 :0;
或(请参阅问题的修订版2)
int filter = !number -1;
或
int filter = !number + (-1); /* Does not use the - operator. */
或
int filter = !number + (union {unsigned u; int i;}){UINT_MAX}.i;
(不确定后者是否调用了UB。)
int filter = !number + ~0;
(无论如何都可以工作)