C / C ++中的“!<number>”是什么意思

Raj*_*ain -8 c c++ operators logical-operators

!<number>c中的含义是什么。例如!-2还是!3

cout << !-2;

Output:
0

cout << !3;

Output:
0
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 5

!是逻辑否定运算符。根据C标准(6.5.3.3一元算术运算符)

5逻辑求反运算符的结果!如果其操作数的值比较不等于0,则为0;如果其操作数的值比较等于0,则为1。结果的类型为int。表达式!E等效于(0 == E)。

并且来自C ++标准(8.3.1一元运算符)

9逻辑否定运算符的操作数!在上下文中转换为bool(第7条);如果转换后的操作数为false,则其值为true;否则为false。结果的类型是布尔。

因此,例如,此表达式

cout << !-2;
Run Code Online (Sandbox Code Playgroud)

根据C引号等效于

cout << ( 0 == -2 );
Run Code Online (Sandbox Code Playgroud)

在C语言中,运算符的结果具有类型,int而在C ++语言中,运算符的结果具有类型bool

请注意,在C ++中,您可以使用替代令牌not。例如,上面的语句可以像

cout << not -2;
Run Code Online (Sandbox Code Playgroud)

在C语言中,您可以包含标题<iso646.h>,并将宏not用作操作员的替代记录!

还有一个技巧。例如,如果您想从C函数返回一个整数表达式,以将其完全转换为1或0,则可以编写例如

return !!expression;
Run Code Online (Sandbox Code Playgroud)

也就是说,如果expression不等于,0则第一次应用运算符!会将表达式转换为0,第二次应用运算符!会将结果表达式转换为1

就像写一样

return expression == 0 ? 0 : 1;
Run Code Online (Sandbox Code Playgroud)

但更紧凑。