为什么输出这个呢?不懂

img

第一层循环:x -= 2 等价于 x = x - 2,所以输出 1,然后 while 里面 !(--x) 的结果为 1,继续下一个循环(这时候 x 变成 0);
第二层循环:x -= 2 等价于 x = x - 2,所以输出 -2 ,然后 while 里面 !(--x) 的结果为 0,结束循环;

你别看代码短,这里就涉及3个知识点
1.do,while循环中,先执行do,再判断。
2.--x,先执行--,再取值
3.int型转bool型的隐式转换中,0=false,非0=true
好了,第一次循环,x-=2,此时x=1,输出1,然后--x,x变成0,0等于false,取反变成true,于是进入第二次循环
第二次循环,x变成-2,输出-2,-2转bool是true,取反变false,条件不满足跳出循环