15-优先级和关系运算符
6.3.5 优先级和关系运算符
关系运算符的优先级比算术运算符(包括+和-)低,比赋值运算符高。这意味着 x > y + 2 和 x > (y + 2) 相同, x = y > 2 和 x = (y > 2) 相同。换言之,如果 y 大于 2 ,则给 x 赋值 1 ,否则赋值 0 。 y 的值不会赋给 x 。
关系运算符比赋值运算符的优先级高,因此, x_bigger = x > y; 相当于 x_bigger = (x > y); 。
关系运算符之间有两种不同的优先级。
高优先级组: < <= > >=
低优先级组: == !=
与其他大多数运算符一样,关系运算符的结合律也是从左往右。因此:
ex != wye == zee与(ex != wye) == zee相同
首先,C判断 ex 与 wye 是否相等;然后,用得出的值 1 或 0 (真或假)再与 zee 比较。我们并不推荐这样写,但是在这里有必要说明一下。
表6.2列出了目前我们学过的运算符的性质。附录B的参考资料II“C运算符”中列出了全部运算符的完整优先级表。
| 运算符(优先级从高至低) | 结合律 |
| :----- | :----- | :----- | :----- |
| () | 从左往右 |
| - + ++ -- sizeof | 从右往左 |
| * / % | 从左往右 |
| + - | 从左往右 |
| < > <= >= | 从左往右 |
| == != | 从左往右 |
| = | 从右往左 |
小结: while 语句
关键字:
while
一般注解:
while 语句创建了一个循环,重复执行直到测试表达式为假或0。 while 语句是一种入口条件循环,也就是说,在执行多次循环之前已决定是否执行循环。因此,循环有可能不被执行。循环体可以是简单语句,也可以是复合语句。
形式:
while ( expression )
statement
在
expression
部分为假或0之前,重复执行
statement
部分。
示例:
while (n++ < 100)
printf(" %d %d\n",n, 2 * n + 1); // 简单语句
while (fargo < 1000)
{ // 复合语句
fargo = fargo + step;
step = 2 * step;
}
小结:关系运算符和表达式
关系运算符:
每个关系运算符都把它左侧的值和右侧的值进行比较。
< 小于
<= 小于或等于
== 等于
>= 大于或等于
> 大于
!= 不等于
关系表达式:
简单的关系表达式由关系运算符及其运算对象组成。如果关系为真,关系表达式的值为1;如果关系为假,关系表达式的值为0。
示例:
5 > 2为真,关系表达式的值为1
(2 + a) == a 为假,关系表达式的值为0