语句
int i=0,x=0;
while(!x&&i<3)
{
x++;i++;
}
我的理解是这里x=0,那么!x就是非0,即为真吧,那么它为什么是能循环一次,求详解。
另外我在循环里加上了cout<<x<<i,x和i输出都是1.完全不懂,求解
因为循环一次以后,x=1,i=1,所以!x就是false了,循环就停止了啊
x和i都是在循环里自增,所以循环一次,输出的肯定都是1了呀
1、!x&&i<3 第一次x=0,x为假,所以!x为真, && 逻辑与,即!x和i<3都为真,才执行。后面的i<3为真,进入while循环体内部。
x++;i++;之后,x为1,i为1。所以cout<<x<<i,x和i都为1.
2、第二次循环,x为1(真),则!x为0(假),&&右边的i<3不再执行,所以该循环只执行一次。
while(!x&&i<3) //第一次x=0,i=0,能进循环
{
x++;i++; //x++,x变成1了,i++,i变成1了,第二次循环!x就是false.,while不满足,就结束while循环
}
第一次循环后x=1,一次!i为false;你如果想看见x++的后加行为你可以这样 int a = x++;这样a为x自增以前的值
while( !x && i < 3)
执行一次循环之后
变为
while( !1 && 1 < 3)
!1 == 0 1 < 3 == 1
==>
while( 0 && 1)
x=0既x=false,所以!x=true,i<3也为true,所以第一次可进循环。
第一次:初始x=0,i=0,判定条件!x为true,i<3为true,综合为true,最后,x=1,i=1
第二次:初始x=1,i=1,判定条件i!x为false,i<3为true,综合为false
x=0时,!x为true
x不为0时,不论为几,!x都是false。
所以只执行了一遍
因为第一次循环的时候2个都是0,那么是满足条件的,所以可以进去,
你输出2个都为1是因为你是在++后输出的吧
第一次进去能满足条件,第二次加1后就不能进去while了,所以都打印1
理解C++会把0作为false,非0值作为true就容易了。
关键是要一步步分析。最后,实际生产中不要写出一些怪异的代码,要简洁易懂。
1 初始x=0,i=0,x为true,i<3为true, true, x=1,i=1
2 初始x=1,i=1, x为false,i<3为true, false
看你的Cout放到哪里了,放到循环第一行肯定输出0,你应该放到最后一行了。执行一次上面讲的很清楚了