C++ C运算符不适用于int?

C++ C运算符不适用于int?,c++,c,compiler-construction,operators,C++,C,Compiler Construction,Operators,我有 二进制中的5是:0101 如果我们对每一位应用逆运算,我们应该得到1010,但是不一定是逆变器,它是逻辑运算符。为什么我会得到0 这就是为什么在C中,正数被视为true,因此-将其删除将导致0? 此编译器是特定的吗?not(!)运算符返回0或1,具体取决于输入是非零还是0 如果要查找按位求反,请尝试~x是一个逻辑运算符!expr具有值0如果expr具有值非零。您需要按位~(非)运算符 int x = 5; printf("%d", x); //i get 5... expected x

我有

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

这就是为什么在C中,正数被视为true,因此
-将其删除将导致0?
此编译器是特定的吗?

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


如果要查找按位求反,请尝试
~x

是一个逻辑运算符<代码>!expr
具有值
0
如果
expr
具有值非零。您需要按位
~
(非)运算符

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

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

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

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

也许你指的是接线员
~
?就是

x = ~x;

我刚才讲的是C++。在C中,操作符的值是0或1对应于<代码> false 和 < <代码> > C++,结果是类型<代码> int <代码>。请发表评论…@Andrey,看看你只相隔2分钟的时间。很容易,哈克斯在给出他的答案之前没有看到你的答案。我认为,在这种情况下,最好是让对方有疑问,或者至少直接留下评论。@JensGustedt你认为这个答案花了2分钟写出来吗?我会给的好处的怀疑,但哈克斯这样做的所有时间笑。只是愚蠢的,我真的不明白it@Andrey,请冷静,不要无缘无故地打架。所以在这里帮助人们,这应该是你最关心的。页面并不总是在您希望刷新时刷新。假设他那样做只是为了名誉是荒谬的。他已经超越了10公里的界限,拥有他所能获得的所有特权。@Andrey,我不认为这是为了代表本身。如果我不辞辛劳地回答这样一个基本的问题(你们都应该先搜索重复的问题),然后有人投票否决我,我会很生气,毫无疑问。这与正数无关。在逻辑上下文中,任何非零数字都被视为
true
x = ~x;