C not运算符是否适用于int?

时间:2014-01-10 23:11:23

标签: c++ c compiler-construction operators

我有

int x = 5;
printf("%d", x); //i get 5... expected

x = !x;
printf("%d", x);// i get 0... hmm 

二进制中的5是:0101 如果我们对每个位应用逆,我们应该得到1010,但!不一定是逆变器,它是一个逻辑运算符。为什么我会得到0

是这样的原因,在C中,正数被视为真,因此! - 它会导致0? 这个编译器是特定的吗?

3 个答案:

答案 0 :(得分:13)

not(!)运算符返回01,具体取决于输入是非零还是0

如果您正在寻找按位否定,请尝试~x

答案 1 :(得分:2)

!是一个逻辑运算符。如果!expr的值非零,则0的值为expr。您需要按位~(NOT)运算符。

x = ~x;

答案 2 :(得分:2)

表达式!x的结果具有类型bool(在C ++中)并且如果false不等于0则等于x,否则等于true

在您的情况下,!x将等于false因为x == 5。然后,此值(false)将在赋值语句中转换为类型intx将等于0.

也许你的意思是运营商~?那是

x = ~x;

我在谈论C ++。在C中,运算符的值为0或1,对应于C {+ falsetrue,结果的类型为int