| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 568 人关注过本帖
标题:!(--x)
只看楼主 加入收藏
代码书生
Rank: 2
等 级:论坛游民
帖 子:3
专家分:15
注 册:2014-1-19
收藏
得分:10 
楼主这是我第一次给人解说程序,水平有限错了就当我瞎掰!我亲自试了一下此程序没有任何问题,输出的结果为1和-2.
int x=3;
do{
printf("%d\n",x-=2);
x-=2等价于x=x-2,因为x已经被定义为3,代进表达式x-=2中去,之后x变成了1。这时程序会自动输出1的。
}while(!(--x));
!(--x)这个是while这个循环的条件表达,其中的--x表示x=x-1,把由上面的程序x已经变成的1带入其中,得到--x表达式的值为0,整个!(--x)也就变成了!(0),其中0表示假,!(0)表示非假,就是表示真。所以while的表达式!(--x)为真,所以跳到do处继续执行。这时x=0,经过x-=2后,x=-2,这时程序自动输出-2,再把x=-2代入(!(--x))表达式中,--x等价于x=x-1,--x表达式的值为-3,其中-3表示真,!(-3)就表示假了。所以!(--x)这个表达式为假,因此循环结束不会往下执行,最后程序输出1和-2.

[ 本帖最后由 代码书生 于 2014-1-19 23:55 编辑 ]
2014-01-19 23:45
w851777025
Rank: 7Rank: 7Rank: 7
来 自:新疆
等 级:黑侠
威 望:2
帖 子:135
专家分:584
注 册:2014-1-19
收藏
得分:6 
以下是引用c盲在2014-1-19 18:46:17的发言:

int x=3
do{
   printf("%d/n",x-=2);
} while (!(--X));
我主要不明白!(--X)是什么东西??
x-=2后,x=1赛,那么怎么判断x=1非(--x)呢????
      望指导指导
第一遍输出x-=2,这个时候x=x-2,x=1;输出1;
!(--x) 1-1=0;0为假 !0呢?就变成真了,继续循环;
这个时候x的值是0;
第二遍进循环x-=2,x=x-2;x=0-2;x=-2;输出-2;
!(--x) 值为假,退出循环。
所以这道题结果为 1,-2。
!(--x)别搞混了,它只是把x的值非成真的,并没有改变x本身的值,一般错都错在这了。
2014-01-20 01:04
c盲
Rank: 1
等 级:新手上路
帖 子:17
专家分:3
注 册:2013-11-9
收藏
得分:0 
回复 8楼 wp231957
哦,不好意思,可能是我表达不太清楚吧,主函数部分是这样的:
{
 int x=3;
 do{
     printf("%3d",x-=2);
    }
 while(!(--x));
 return 0;
}
这是书上的例题,我主要是不懂“!(--x)”这一句的意思
2014-01-20 14:56
c盲
Rank: 1
等 级:新手上路
帖 子:17
专家分:3
注 册:2013-11-9
收藏
得分:0 
回复 11楼 代码书生
代表真假不是1和0吗?为什么到-3的时候会是真的?
2014-01-20 15:03
c盲
Rank: 1
等 级:新手上路
帖 子:17
专家分:3
注 册:2013-11-9
收藏
得分:0 
回复 11楼 代码书生
噢,我想明白了,非0就是真···万分感谢
2014-01-20 15:07
c盲
Rank: 1
等 级:新手上路
帖 子:17
专家分:3
注 册:2013-11-9
收藏
得分:0 
回复 12楼 w851777025
搞明白了,谢谢
2014-01-20 15:08
快速回复:!(--x)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038750 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved