如何将所有位设置为1或零取决于原始数字

时间:2018-10-06 15:44:46

标签: c

我想知道如何将所有位设置为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'的所有位

我将非常感谢您的帮助。

1 个答案:

答案 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。)

Kamil's (deleted) comment提醒:

int filter = !number + ~0;

(无论如何都可以工作)