c语言
6. 请用小括号和数字序号体现表达式中运算符的优先顺序,并口算出表达式的值(下边假设变量 a、b、c、d 的值分别是 1、2、3、4)A. a + b && c / d
写成:(a + b)1 && (c / d)2
求值:(1 + 2) && (3 / 4) == 3 && 0 == 0
问:除号的优先级不是要比加号和“&&”的优先级来的高吗?
不是应该写成: (a+b)2 && (c+d)1 ? 1+2 && 3/4
程序开始执行:
3 && 3/4
3 && 0.75
1
结果为1
在罗辑运算,是从左至右,先算它左边的,再算它右边,再罗辑,清楚了。罗辑的返回值是一个0或1. 首先要说明的是&& 是一个逻辑运算符
逻辑与:a&&b就是当且仅当两个操作数均为 true时,其结果才为 true;只要有一个为零,a&&b就为零。
逻辑运算的优先级小于算术运算符,而且是从左往右的哦。所以是先把左边的值算出来,然后再把右边的值算出,最后进行左右逻辑与
写成:(a + b)1 && (c / d)2
求值:(1 + 2) && (3 / 4) == 3 && 0 == 0
结果 没问题。
注意逻辑与&&和位与&的区别
两个例子你可以运行下试试
1)int a=2,b;
b=0 && a ++;
printf("%d %d \n",a,b);
int a=2,b;
b=0 & a ++;
printf("%d %d \n",a,b);
你会发现两组b 都等于0,但第一个a=2,第2个a=3.
2)int a=2,b;
b=2 && a ;
printf(" %d \n",b);
int a=2,b;
b=2 & a ;
printf(" %d \n",b);
你会发现第一个b=1,第2 个b =2.
好好体会下&&用法,希望对你有所帮助。
页:
[1]