一道c语言题

请问,这个圈1题,为什么答案是B,谢谢

C语言中的任何一个双目运算符(就是和2个数做运算的运算符,比如一些数学运算符,逻辑运算符,关系运算符,位运算符)都可以和赋值运算符在一起组成“复合的赋值运算符”。
具体运算规则如下:

x - = 2 左边保留变量x,然后把赋值左边的变量和运算符都挪到右边,变成x=x-2即可,此时x=1。
所以,第一个循环体内,x=1,输出1;循环判断条件 (--x)=0,!(--x)条件为真,继续循环体,此时x=0。
第二个循环体,执行x - = 2后,x=-2,输出-2;循环判断条件 (--x)=-3,中断循环。追问

怎么由x=1变为x=0的?

while里的语句执行的吗?

为什么x=-3,就终止了?

追答

第一次循环条件!(--x),执行后x=0,但!0为真啊,继续下一个循环啊
第二次循环后,条件!(--x),这个条件判断为假啊,虽然此时x=-3,但这个条件!(--x)为假。中止执行!
--x,先执行x=x-1。

追问

为什么x=0为真?

说错了

为什么x=!0为真

没学过这个while

追答

x=0,!是非运算,非0就是真了。

追问

非-3也就是0,意思就是假?

是这个意思吧?

追答

是的

追问

好的,多谢

追答

-3,作为判断条件时,非零本为真;但!(-3)为假,不是把它变为零,但二进制计算机布尔值存储为0是假,其它存为1是真。

追问

厉害啦,大神

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-01-02
楼主是对真假的判断不太理解吧。只要是一个非零的数字便是真,而在这个数字前加上!整个表达式就为假,!(-3)就等价与0,C语言中就是这样规定的。追问

感谢

很清楚

别的语言也是这样吗?

规定的?

看来该补补了

本回答被提问者采纳
第2个回答  2019-01-02
当x等于3时,x-=2后x等于1,输出1;
--x后x等于0,!(0)为真,继续循环。

当x等于0时,x-=2后x等于-2,输出-2;--x后x等于-3,!(-3)为假,退出循环。

所以输出
1
-2
每行一个。追问

为什么会为假呢,看不懂

为什么非-3会为假呢?

追答

0为假,非0为真。所以-3为真,非-3当然是假。

追问

谢谢

追答

不用谢

采纳吧

追问

你回答的比较晚。不过我还问了同一个问题

我把那个问题给你采纳

回答一下就行

第3个回答  2019-01-02
!(--x)等价于(--x)==0
有问题再联系我追问

分析下这道题呗

刚开始第一个循环等于1然后出循环,执行while,然后?

追答

x=0,然后执行循环x-=2;,就是x==-2,有什么问题吗?挺简单的
后面x==-3,(--x)就不是0了,循环跳出

追问

谢谢

追答

不客气

相似回答