这些运营商在C中做了什么

时间:2013-09-27 02:11:10

标签: c operators

我是C的新手,我正在查看一些示例代码,我不确定if语句中的这些运算符是什么“问”,所以说。

以下是代码:

int main(void){

    int a = 99;

    int b = 0;

    int c = 74;

    if( a || b )
      printf("first\n");

    else
      printf("second\n");

    if( a && c )
      printf("third\n");

    else
      printf("fourth\n");

    if( !a )
      printf("fifth\n");

    else
      printf("sixth\n");

    if( (a && b) || c )
      printf("seventh\n");

    else
      printf("eighth\n");

    if( !c || !b )
      printf("nineth\n");

    else
      printf("tenth\n");
}

我知道运营商的意思,我只是不明白当他们通过“if”语句时会发生什么。有人可以向我解释一下吗?

3 个答案:

答案 0 :(得分:1)

回答这个问题的关键是实现C如何处理参与逻辑运算的整数:

  • 零被视为FALSE
  • 除零以外的所有值均视为TRUE

以下是您的代码段中三个运算符的真值表:

!FALSE -> TRUE
!TRUE  -> FALSE

FALSE || FALSE -> FALSE
FALSE || TRUE  -> TRUE
TRUE  || FALSE -> TRUE
TRUE  || TRUE  -> TRUE

FALSE && FALSE -> FALSE
FALSE && TRUE  -> FALSE
TRUE  && FALSE -> FALSE
TRUE  && TRUE  -> TRUE

如果在没有括号的表达式中使用多个运算符,则在二进制!&&之前应用一元||

现在你有足够的信息来自己弄清楚输出。

答案 1 :(得分:0)

他们只是普通的运营商:

|| = or
&& = and
! = not

因此...

if( a || b )
  printf("first\n");

说...

if a or b then print "first"

和...

if ( !a )

时...

if not a

相当于:

if a is equal to 0 or NULL

真的很基本的东西!

答案 2 :(得分:0)

如果使用bool类型的变量,可能更容易学习布尔运算符。我发现布尔检查在处理int时不太有用,因为将数字视为真或假是不常见的。对于int,您通常会考虑它们的数值,这在布尔逻辑中没有意义