繁体   English   中英

是什么? 运算符意味着在变量前面?

[英]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;
}

!okok == 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM