x=2;y和Z的值不变;
逻辑运算++x的值为1,因此后面的语句没有执行;
参考:
短路求值
作为"&&"和"||"操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值。这是这两个操作符的一个重要属性。假如expr1和expr2都是表达式,并且expr1的值为0,在下面这个逻辑表达式的求值过程中:
expr1 && expr2
expr2将不会进行求值,因为整个逻辑表达式的值已经可以确定为0。 类似地,如果expr1的值不是0,那么在下面的这个逻辑表达式的求值过程中:
expr1 || expr2
expr2将不会进行求值,因为整个逻辑表达式的值已经确定为1。
下面是一个简单的可能会出现短路求值的例子。假如我们需要处理的字符数量不超过5个。
int cnt =0;
while (++cnt<=5&&(c=getchar())!=EOF)
{
...
当表达式++cnt<=5的值是假时,下一个字符就不会被读取。
a++运算后得2,非零,即为真
||运算为或运算,有一个为真就返回真,所以直接舍去了后面的运算
所以b,c没有进行自加运算
补充:
||与&&的同级运算符,所以联合运算时从左向右运算,先执行||
可以改写成:
(++a)||(++b&&++c)
所以把后面的部舍去了。
(++运算符的运算级比||和&&都高)
在C++中
!结果只有两种,一种是0,一种是非零,所以当然a=5,!a就是0,相当于
是与否,
&&的话只有当两个变量都不为零是
结果才为1,其他情况结果为0,||的意思就是只有当两个变量都为零时结果为零,其他都为1
逻辑与2边表达式的值中有一个是0,则结果是0
逻辑或2边表达式的值中有一个是1,则结果是1
逻辑非的作用是将0变1,将非1变0
1.a=5,5是非0,非0必真,用1表示真则它的非就是假用0表示。下边同理你只要弄清非0必真就可以了用1表示。