关系表达式(relational expression):进行比较的判断表达式
关系运算符(relational operator):关系表达式中出现的运算符
一、关系运算符
运算符 | 含义 |
< | 小于 |
<= | 小于或等于 |
== | 等于 |
>= | 大于或等于 |
> | 大于 |
!= | 不等于 |
关系运算符可以用于字符的比较,此时比较的是字符代码的大小(如ASCII码)
关系运算符不可以用于比较字符串
关系运算符可以用于浮点数比较,但是只能使用<和>,因为舍入误差可能造成两个逻辑上应该相等的数不相等
示例代码:使用math.h中的fabs()函数进行浮点数判断
/* test fabs function */
#include <stdio.h>
#include <math.h>
#define PI 3.14
int main(void)
{
float key_input;
printf("Enter the value of PI: \n");
scanf("%f", &key_input);
while(fabs(key_input - PI) > 0.01) // fabs()函数返回一个浮点值的绝对值
{
printf("Wrong, enter again. \n");
scanf("%f", &key_input);
}
printf("Right! \n");
return 0;
}
运行结果:
每个关系表达式都被判定为真或假
对C来说,一个真表达式的值为1,一个假表达式的值为0
C中,所有的非零值都被认为是真,只有0被认为是假
只要while循环的判断条件的值非零,就可以继续执行
如果关系表达式为真,其值为1;如果为假,其值为0
while(num) // 与while(num != 0)等效
while(num == 1) // 检查num的值是否为1
while(num = 1) // 将1赋给num,该表达式始终为真
不要在应该使用==的地方使用=,二者有很大区别,在类似while循环这种场合用错的话,程序会出现意想不到的错误
如何避免:如果进行比较的双方有一个是常量,可以把其放在比较表达式的左边,这种写法有助于发现错误
while(1 == num) // 编译器显示正确
while(1 = num) // 编译器报错,有利于帮助开发者发现问题
二、_Bool类型
C中,表示真/假的变量一直由int类型表示
C99中,专门增加了_Bool类型
一个_Bool变量只可以具有值1(真)或0(假),如果把一个_Bool变量赋为一个非零的数值,变量就被设置为1,C把任何非零的值都认为是真
如果包含了stdbool.h头文件,可以使用bool代替_Bool,并把true和false定义为值1和0的符号常量
三、关系运算符的优先级
赋值运算符 < 关系运算符优先级 < 算术运算符
示例:
x > y + 2 等同于 x > (y + 2)
关系运算符从左到右进行结合
a != b == c 等同于 (a != b) == c
运算符(优先级从高到低) | 结核性 |
() | 从左到右 |
- + ++ -- sizeof() (所有的一元运算符) | 从右到左 |
* / % | 从左到右 |
+ - | 从左到右 |
< > <= >= | 从左到右 |
== != | 从左到右 |
= | 从右到左 |