我有
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?
这个编译器是特定的吗?
答案 0 :(得分:13)
not(!
)运算符返回0
或1
,具体取决于输入是非零还是0
。
如果您正在寻找按位否定,请尝试~x
。
答案 1 :(得分:2)
!
是一个逻辑运算符。如果!expr
的值非零,则0
的值为expr
。您需要按位~
(NOT)运算符。
x = ~x;
答案 2 :(得分:2)
表达式!x
的结果具有类型bool
(在C ++中)并且如果false
不等于0则等于x
,否则等于true
。
在您的情况下,!x
将等于false
因为x == 5
。然后,此值(false
)将在赋值语句中转换为类型int
,x
将等于0.
也许你的意思是运营商~
?那是
x = ~x;
我在谈论C ++。在C中,运算符的值为0或1,对应于C {+ false
和true
,结果的类型为int
。