0

i) if(0) 是什么意思?

每次我用它来测试我会得到什么输出时,它都会返回错误的部分。

它是否等效于 if(0 == 0),以防它评估真实部分。

ii) 逻辑非的结合性!从右到左。

链接:http ://www.liv.ac.uk/HPC/HTMLF90Course/HTMLF90CourseNotesnode94.html

逻辑运算符链接中的第二个示例:

但根据“包含单子 .NOT. 的两个子表达式首先被有效评估,因为其中有两个最左边,.NOT.A 首先完成,然后是 .NOT.E.”,左边的 NOT 被评估第一个,但是第一个要评估的应该是右边的那个……???

4

3 回答 3

4

I ) 在 C 中,0 为假,其他一切为真。因此,使用if (0),条件将始终为假,并且主体将永远不会被执行,因为 0 始终为假。

if (0 == 0)完全不同,因为 0 实际上等于 0,并且表达式的0 == 0计算结果为 true,因此if执行了主体。

II ) 运算符的关联性决定了当您有来自相同优先级的多个运算符的歧义时会发生什么。例如,应该发生a - b - c什么?应该b - c首先评估还是a - b?以什么顺序执行它们并不重要,因为如果 a = 1、b = 2 和 c = 3,a - (b - c)则为2,但(a - b) - c为 -4。但是因为减法是左结合的,我们可以知道它a - b会先被计算,所以a - b - c当 a = 1, b = 2, c = 3 时,答案是 -4。

话虽如此,我想不出逻辑非运算符的关联性很重要的情况,并且运算符的关联性并不能确定当它被不同优先级的运算符分隔时它将以什么顺序执行。

于 2011-11-20T02:22:48.990 回答
3

i) 在 C 中,0 表示假,所以if(0)总是会跳转到else(如果有)。它与if(0==0), (或简单地if(1))相反,它将起到真正的作用。

于 2011-11-20T02:20:56.933 回答
0

if (0)将谓词评估0为二进制值。C 中的二进制值使用整数,其中零表示假,非零表示真。因此,0 将始终评估为假。

对于二元运算符,右关联或左关联决定了处理其他同等重要的运算符的顺序。考虑减法运算符:

37 - 10 - 4

两者-的优先级相同,那么我们应该首先评估哪个?好吧,-是左关联的,所以我们这样做:

(37 - 10) - 4 ==> (27) - 4 ==> 23

如果-运算符是右结合的,我们会这样做:

37 - (10 - 4) ==> 37 - 6 ==> 31

等式 ( =) 是右结合的,因为我们可以将等式链接在一起。所以,如果我们看到

// a and b are initialized to 0
a = b = 45

两者=的优先级相同,因此我们从右到左评估并执行以下操作:

a = (b = 45) // b receives 45
a = 45       // a receives 45

如果我们从左到右,我们会得到一个意想不到的结果:

(a = b) = 45 // a receives 0
b = 45       // b receives 45

然而,对于一元运算符,排序仅在多个一元运算符影响相同值时才有意义。例如,让我们这样做:

char x = 0xFF
bool y = !~x

这些一元运算符是右结合的,所以我们这样做:

!(~0xFF) ==> !(0x0) ==> true

在您展示的示例中,否定运算符影响A并且E没有“同等优先级”,因为它们没有相同的操作数。因此,关联性不适用。

于 2011-11-20T02:22:07.243 回答