这是我学校的一个练习,我试图理解为什么 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 时,循环停止
在最后一次循环迭代中,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。这是最右边的表达式,因此保留其值,然后退出循环。