1.&&运算符,意思是 ‘与’。 ‘||’ 运算符是 ‘或’。
2.&&运算符的优先级高于||;
3.逻辑运算从左往右
4.假如&&符号前为假,那么后面的表达式忽略, 整式为假
0 && 1 || 9
5.假如 || 前的表达式为真,也忽略后面的表达式, 整式为真
1 || 0 && 0
6.运算符优先级的体现
++x || --y && ++z;
很多人一位运算符优先级的意思是 先进行( --y && ++z)判定,因为 && 级别 高于 ||, 其实不然:
正 ++x || (–y && ++z) 假入++x 为假, 就判定(–y && ++z)
误 (++x || --y)&&(++z) 假如 ++x为假 ,就判定–y
这就是优先级的体现
下面来一些简单的例题
r = 8 && 9; 输出r=1; (非零即为真哦!)
r = 0 && 3; 输出r=0;
相信大部分同学对于这种简单的判断肯定是一眼就可以看出来的,下面那就来进阶吧!
int x = 0, y = 0, z = 0;
int r;
r = ++x || ++y && ++z;
printf("%d %d %d %d", r, x, y, z);
正解 r = 1 x = 1 y = 0 z = 0
错解 r = 1 x = 0 y = 1 z = 1 (错解可能多种,这就不一一列举了)
首先正解的理解 ++x || ++y && ++z 先计算++x 假如++x为真,后计算(++y || ++z)
这里是一个难点,也是运算符优先级体现的地方, 并不是 用 ++x || ++y 计算,再接 ++z;而是 先++x,假如为真,后面跳过i,假如为假,
计算(++y && ++z),并将这结果和前面 ++x 判定。
补充:双目运算符
& 按位与
| 按位或
如果你认为一般只会让你用 && 和|| 判定 ,那你就太嫩了
int x, y, z;
int r;
x = y = z = 0;
r = ++x | ++y & ++z;
1 1 1 -1
是的,没错,这里它是所有的都计算了,并没有 跳过任何一步,在判定时,我认为可以近似看似 && 和 || ,
但又没有是真或是假就 跳过不运算的说法,
最后:
x = y = z = 0;
r;
++x && --y | z++;
输出: r = 1 x= 1 y = -1 z = 1
根据以上总结分析一下这题:
先 ++x&&–y 为真,本来如果后面为 || 则不运算, 奈何 却是 ‘|’ ,它是不管真假都要算的, 先用 x =0 进行判定(x++,先判定,再++),为真,输出 r = 1;别忘记z的自加在后面, 这里也是很容易迷糊滴。
关于 & 和 | 位运算符,以后再来详细讲,假如你是新接触 && 和 || ,不妨可以用我的理解呢·。
新手上路,不当之处还请包容指出,一起学习进步!
闲暇之余,不妨来首 sing me to sleep,一起嗨起来!!!