c语言关于自减的问题

发布时间:2024-05-19 14:08 发布:上海旅游网

问题描述:

main()
{int x=3;
do{printf("%3d",x-=2);}
while(!(--x));
}
结果;1 -2
谁能解析一下,拜托了
特别 !(--x)甚么来的。

问题解答:

!(--x)
!是逻辑非。就是当true的时候取非为false 当false 时为true
上面的循环x=3 输出是x-=2 所以第一次循环输出的数为1
while后面的--x的值为0,任何非0数可以自动转化为true,0转化为false,所以--x为false,前面取非,就是true。进行下一次循环。x=0时,x-=2的值就是-2,所以第二次输出为-2,
--x为-3,-3转化为true,取非为false,退出循环。

正数真,负数假,第一次 -x=-1 !(-1)真 第二次 -x=2 !(2) 假 是这样的吧

!(--x);\\(--x)相当于x=x-1,而!符是,即大于等于零的是真,如果x是负,就不执行

第一次 x=3-2=1, (--x)=0
第二次 x=0-2=-2 (--x)=-3(退出循环体)
结束。
结果 1,-2
do
whlie 的结束语句就是 (--x)等于0的时候退出。
上面的那个是(!(--x))意思就是说当(--x)不等于0的才时候结束。

--x,就是当前x的值已经是减1以后的值(即--x=原来x的值-1),执行完该句之后再出现的x的值还是减1以后的值。

x--,就是当前x的值还是为原来x的值,但执行完该句之后再出现的x的值则是减一以后的值

1)x=3,第一次做x-=2,得x=1,(--x)的值是“减1以后的值”即0;
2)x=0,第二次做x-=2, 得x=-2,(--x)的值是“减1以后的值”即-3;!(-3)=1,所以循环结束。

“--” 是自减运算符,你这里的(--x)是前自减,也就是说x先自减1变为0,然后再用逻辑非!对自减后的x转为true,所以再输出-2。但x再次自减后变为-3,为true,但再用!转为false,即假,跳出循环,程序执行完毕!

热点新闻