while(!(--a))是什么啊?有了解的吗?

下列程序段的输出结果是 。
int a=3;
do { printf(“%d\n”,a-=2);} while(!(--a));
A)3和0 B)死循环,没有输出 C)1和-2 D)1
答案选C,我只知道1,不知道-2怎么来的。

ABOUTYOU
浏览 519回答 2
2回答

哆啦的时光机

while(!(--a))的意思为先计算a=a-1,再判断a的值是否为0,为0则继续执行循环语句,实例解析如下:①如图,首先先执行a=a-2,得a=1并输出②再执行while(!(--a)),此时先执行a=a-1,得a=0,所以!a不为0,所以此时while的逻辑判断为真,会继续执行printf(“%d”,a-=2);所以会输出-2,然后继续判断!a就为0了,此时判断逻辑假,不会继续执行循环了。再如下图:输出a=1后,得出a=0,逻辑为假,此时直接退出循环,所以只输出1.

慕容森

C/C++没有所谓的“逻辑量”,而是用普通数值表示逻辑值。其中0表示逻辑假,非0值表示逻辑真。例题第一次循环结束时,a值为1,此时循环条件!(--a)=!0为真,因此会进入第二次循环从而输出-2。
打开App,查看更多内容
随时随地看视频慕课网APP