【问题标题】:Logical expression in CC中的逻辑表达式
【发布时间】:2014-03-08 01:26:35
【问题描述】:

我被课堂上的以下问题困住了。使用优先级,求解以下逻辑表达式:1 && -1 * -3 - 4 = 8 != 9 / 10 > 0
我首先使用以下步骤解决问题
-> 1 && -1 * -3 - 4 = 8 != 9 / 10 > 0
-> 1 && 3 - 4 = 8 != 1 > 0
-> 1 && -1 = 8 != 1 > 0
-> 1 && 1 && 1 >= 8 != 1 >0
-> 1 && 1 && 0 != 1 >0
-> 1 && 1 && 0 != 1
-> 1 && 1 && 1
-> 1 ,所以我想答案是 1,但是当我使用 C 程序尝试时,答案是 0。(代码如下所示。)


#include <stdio.h>
int main(int argc, char* argv[]){
    int x = 1 && -1 * -3 - 4 < 5 && 6 <= 7 >= 8 != 9 / 10 > 0;
    printf("1 && -1 * -3 - 4 < 5 && 6 <= 7 >= 8 != 9 / 10 > 0 = %d\n", x);
    return 0;
}

【问题讨论】:

  • 9/100,而不是 1
  • 非常感谢,刚刚知道整数除法总是向下取整。谢谢红色警戒。

标签: c logic expression


【解决方案1】:

在 c 中,整数除法不进行任何舍入。所以 9/10 为 0,余数为 9,余数被 / 运算符抛出(对于 % 运算符,情况正好相反)。此代码结果为 1,如您所料:

#include <stdio.h>
int main(int argc, char* argv[]){
    int x = 1 && -1 * -3 - 4 < 5 && 6 <= 7 >= 8 != 10 / 10 > 0;
    printf("1 && -1 * -3 - 4 < 5 && 6 <= 7 >= 8 != 10 / 10 > 0 = %d\n", x);
    return 0;
}

【讨论】:

    【解决方案2】:

    请注意C中运算符的优先级(就像数学中的pemdas规则):

    * / % + - << >> < <= > >= == != 
    

    最右边的表达

    6 <= 7 >= 8 != 9 / 10 > 0 
    

    被评估为 0。并且您使用 && 逻辑表达式,因此期望整个表达式的结果将为 0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 2015-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      相关资源
      最近更新 更多