[英]What does a ! operator mean in front of a variable?
我只有一个简单的问题,我正在学习 C 编程并且我知道。 运算符表示逻辑非? 我的问题是,在这种情况下,以 do while 循环作为条件意味着什么? 它是否以某种方式检查变量是否已更改?
我知道我可能应该以某种方式找到它,但是当我尝试用谷歌搜索“.”时,它不想显示我的意思。
#include <stdio.h>
int main() {
int input, ok=0;
do {
scanf("%d", &input);
if ( /* condition */) {
//the input is wrong it will scan another one
}
else {
//the input is correct, so the while cycle can stop
//we don't need more inputs
ok = 1;
}
} while (!ok);
//...
//...
//...
return 0;
}
!ok
与ok == 0
相同。
请记住,在 C 中,布尔上下文中的任何非零标量值都表示“真”,而零表示“假”。 写!foo
而不是foo == 0
是 C 的一个常见习惯用法。 它也适用于指针:
FILE *foo = fopen( "some_file", "r" );
if ( !foo )
{
fprintf( stderr, "could not open some_file\n" );
return EXIT_FAILURE;
}
因此, while ( x )
与while ( x != 0 )
相同,而while ( !x )
与while ( x == 0 )
相同。
松散地说,给定的代码重复执行循环的内容“while NOT ok”,意思是“while OK is zero”。 在else
块中, ok
被设置为 1,表示循环不会再次重复。
更正式地说, !ok
是一个表达式,当ok
等于零时为真,当ok
为非零的任何值时为假。
在逻辑运算的上下文中,除零 (*) 之外的任何内容都是true
,零是false
。
所以!1
是 "!true" 是false
!0
为 "!false" 为true
(*) 任何类型的零: NULL
算作零, 0.0
算作零
想想看,ok 有一个布尔值,在初始化时是 false。
(在 c 中,0 有一个假值,我假设你知道这一点。)
在 do while 中,它只是对逻辑值取反,它仍然意味着一个 NOT。 如果条件为真,它将循环,否则,不会。
如果 ok 有一个 false 值并且你将否定它,它将有一个 true 值,循环将,umm 循环。
我希望你能明白这一点,它没有任何其他含义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.