c基础常识理解不了啊

img


(!(-a))的意思是说a不为负数吗?为什么还要第二次循环呢?

!用在逻辑表达式中,表示取反啊。
在语言中只有0代表逻辑"假",其它一切非0值代表逻辑"真"。
在“假”的前面添加"!",就会变成"真"了;
在"真"的前面添加"!",就会变成"假"了。
明白了吗?

不是-a,是--a啊,你看差了啊。
第一次循环输出a的值为1, 然后while判断时,--a是将a先减去1,得到0,然后!a判断a==0则满足条件,继续循环,第二次循环a再次减去2输出-2,然后--a后a变为-3,!a判断a==0不成立,循环结束,所以选择B

因为do..while是先执行再判断,第一次a-2=1,不为负数,再执行一次a-2=-1,是负数,不再执行,所以共循环两次

(!(--a))的意思是 a的值减去1之后取反的真假性 0是假 非0是真