为什么 while 循环结束

问题描述 投票:0回答:1

这是我学校的一个练习,我试图理解为什么 while 循环以 -1 结束

#include <stdio.h>
int main()
{
    int a= 0xfe -067 ;

    while (a>9 ? !!!0:!!( a+1,a-=2,--a))
    {
        printf("%d \n",a);
        if( a+2> 0x11)//(17)
        {
            a = -3;
            continue;
        }

        a+=4;
    }
return 0;

我知道这不是一个现实的例子,但我的学校把这个前任列入了考试。我看到当 a=-1 处于最高值 a+=4 a=3 时,循环停止

c
1个回答
1
投票

在最后一次循环迭代中,a 为 3。

while (a>9 ? !!!0:!!( a+1,a-=2,--a))

a>9
为假,因此使用三元表达式的右侧部分:

!!( a+1,a-=2,--a)

非非

!!
会自行消失,所以我们可以忽略它,留下这个:

(a+1,a-=2,--a)

当有多个用逗号分隔的表达式时,每个表达式按从左到右的顺序计算。然后,除了最右边的表达式之外,每个表达式的值都将被丢弃。

因此代码计算每个表达式:

a+1
为 4。该值被丢弃。

a-=2
为 1。该值被丢弃。然而
-=
运算符确实修改了 a 的值,因此 a 现在是 1。

--a
为 0。这是最右边的表达式,因此保留其值,然后退出循环。

© www.soinside.com 2019 - 2024. All rights reserved.