在上节《C语言if else语句》中看到,if 的判断条件中使用了<=>!=等符号,它们专门用在判断条件中,让程序决定下一步的操作,称为关系运算符(Relational Operators)。

关系运算符在使用时,它的的两边都会有一个表达式,比如变量、数值、加减乘除运算等,关系运算符的作用就是判明这两个表达式的大小关系。注意,是判明大小关系,不是其他关系。

C语言提供了以下关系运算符:

关系运算符 含  义 数学中的表示
< 小于 <
<= 小于或等于
> 大于 >
>= 大于或等于
== 等于 =
!= 不等于

关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,<、<=、>、>=的优先级相同,高于==和!=,==和!=的优先级相同。

在C语言中,有的运算符有两个操作数,例如 10+20,10和20都是操作数,+ 是运算符。我们将这样的运算符称为双目运算符。同理,将有一个操作数的运算符称为单目运算符,将有三个操作数的运算符称为三目运算符。

常见的双目运算符有 +、-、*、/ 等,单目运算符有 ++、-- 等,三目运算符只有一个,就是 ? :,我们将在《C语言条件运算符》中详细介绍。

关系运算符的两边可以是变量、数据或表达式,例如:
1) a+b > c-d
2) x > 3/2
3) 'a'+1 < c
4) -i-5*j == k+1

关系运算符也可以嵌套使用,例如:
1) a > (b > c)
2) a != (c == d)

关系运算符的运算结果只有 0 或 1。当条件成立时结果为 1,条件不成立结果为 0。例如:

  • 5>0 成立,其值为 1;
  • 34-12>100 不成立,其值为 0;
  • (a=3)>(b=5) 由于3>5不成立,故其值为 0。

我们将运算结果 1 称为“真”,表示条件成立,将 0 称为“假”,表示条件不成立。

下面的代码会将关系运算符的结果输出:

  1. #include <stdio.h>
  2. int main(){
  3. char c='k';
  4. int i=1, j=2, k=3;
  5. float x=3e+5, y=0.85;
  6. int result_1 = 'a'+5<c, result_2 = x-5.25<=x+y;
  7. printf( "%d, %d\n", result_1, -i-2*j>=k+1 );
  8. printf( "%d, %d\n", 1<j<5, result_2 );
  9. printf( "%d, %d\n", i+j+k==-2*j, k==j==i+5 );
  10. return 0;
  11. }

运行结果:
1, 0
1, 1
0, 0

对于含多个关系运算符的表达式,如 k==j==i+5,根据运算符的左结合性,先计算k==j,该式不成立,其值为0,再计算0==i+5,也不成立,故表达式值为0。

需要提醒的是,==才表示等于,而=表示赋值,大家要注意区分,切勿混淆。

再谈 if 语句的判断条件

if 语句的判断条件中不是必须要包含关系运算符,它可以是赋值表达式,甚至也可以是一个变量,例如:

  1. //情况①
  2. if(b){
  3. //TODO:
  4. }
  5. //情况②
  6. if(b=5){ //情况①
  7. //TODO:
  8. }

都是允许的。只要整个表达式的值为非0,条件就成立。

上面两种情况都是根据变量 b 的最终值来判断的,如果 b 的值为非0,那么条件成立,否则不成立。

又如,有程序段:

  1. if(a=b)
  2. printf("%d",a);
  3. else
  4. printf("a=0");

意思是,把 b 的值赋予 a,如果为非0则输出该值,否则输出“a=0”字符串。这种用法在后面的程序中会经常出现。

C语言关系运算符的更多相关文章

  1. c语言基础表达式, 关系运算符, 逻辑运算符, 位运算符, 数据的取值范围, 分支结构(if...else, switch...case)

    1.表达式: 表达式的判断是有无结果(值), 最简单的表达式是一个常量或变量, 如:12, a, 3 + 1, a + b, a + 5 都是表达式 2.BOOL(布尔)数据类型: c语言中除了基本数 ...

  2. 【学习笔记】【C语言】关系运算符

    1. 条件判断 默认情况下,我们在程序中写的每一句正确代码都会被执行.但很多时候,我们想在某个条件成立的情况下才执行某一段代码 这种情况的话可以使用条件语句来完成,但是我们暂时不学习条件语句,先来看一 ...

  3. C语言基础学习运算符-关系运算符

    比较大小 首先,我们得先了解一下布尔类型.C语言的C99标准支持布尔类型,关键字为_Bool,用于表示逻辑值true与false.C语言用值1表示true, 用值0表示false.因此布尔类型实际上是 ...

  4. [Objective-C语言教程]关系运算符(8)

    运算符是一个符号,告诉编译器执行特定的数学或逻辑操作. Objective-C语言内置很多运算符,提供如下类型的运算符 - 算术运算符 关系运算符 逻辑运算符 按位运算符 分配运算符 其它运算符 本教 ...

  5. c语言中类型转换与赋值运算符、算术运算符、关系运算符、逻辑运算符。原码、反码、补码。小解。

    类型转换 自动转换 小范围的类型能够自动转换成大范围的类型.short->int->long->float->double 强制类型转换 (类型名)变量或数值 #include ...

  6. C语言运算符(关系运算符)+(逻辑运算符)

    下表显示了 C 语言支持的所有关系运算符.假设变量 A 的值为 10,变量 B 的值为 20,则: 实列: 1 #include <stdio.h> 2 3 int main() 4 { ...

  7. c语言学习笔记 if语句执行流程和关系运算符

    回想现实生活中,我们会遇到这样的情况,如果下雨了就带伞上班,如果没下雨就不带伞上班,这是很正常的逻辑.程序是解决生活中的问题的,那么自然在程序中也需要这样的判断,当满足某个条件的时候做一件事情,这种东 ...

  8. 十一、 BOOL类型、分支结构和关系运算符

    BOOL类型:表示非真即假.只有两个值:YES和NO,而二进制只识别二进制数,所以,将YES替换为“1”,NO替换为“0” BOOL数据类型占一字节的空间内存 BOOL数据类型输出为:%lu:输入为: ...

  9. JAVA算术运算符、关系运算符和位运算符

    算术运算符 1.java的算数运算符包括+(加).-(减).*(乘)./(除).%(取余),在运算过程中出现的隐式转换原则和C语言一样:2. 高位数据向低位数据转化要使用强制转化: 关系运算符 1.j ...

随机推荐

  1. 【LeetCode】94. Binary Tree Inorder Traversal (3 solutions)

    Binary Tree Inorder Traversal Given a binary tree, return the inorder traversal of its nodes' values ...

  2. laravel-v5.1数据库连接文件是.env文件

  3. SQL 横转竖 、竖专横 (转载) 使用Dapper.Contrib 开发.net core程序,兼容多种数据库 C# 读取PDF多级书签 Json.net日期格式化设置 ASPNET 下载共享文件 ASPNET 文件批量下载 递归,循环,尾递归 利用IDisposable接口构建包含非托管资源对象 《.NET 进阶指南》读书笔记2------定义不可改变类型

    SQL 横转竖 .竖专横 (转载)   普通行列转换 问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 ...

  4. intelliJ IDEA 配置MySQL数据库 详解

    1> 在主界面中,点击右边侧栏的 Database ,在点击 + ,再Data Source 选择数据库   2> 填入 Database 数据库名,在输入 User 和 Password ...

  5. hibernate 中多对多关系对象集合的保存

    多对多关系映射和一对多关系映射开发步骤差不多, 例子如下:员工和项目之间的关系,一个员工可以参与多个项目:一个项目可以有多个开发人员参与.因此是多对多的关系. 1 分析数据表 1.1)员工表 CREA ...

  6. [原]MS SQL表字段自增相关的脚本

    --查询表是否有自增字段 SELECT OBJECTPROPERTY(OBJECT_ID('[表名]'), 'TableHasIdentity') --查询表的自增字段 SELECT COLUMN_N ...

  7. nyoj 760 See LCS again

    See LCS again 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 There are A, B two sequences, the number of ele ...

  8. rsync 精确同步文件用法 (转载)

    -- include-from 指定目录下的部分目录的方法: include.txt: aa bb ss Command: rsync -aSz  --include-from=/home/inclu ...

  9. php代码检查

    最近写php,几个同事都是没写过c的,经常写的变量没有定义,而php没有编译,错误无法发现. 我们现在用的是NetBeans,好在其提供了语法检测,如下图,让编辑器强制显示我错误

  10. 从文件/文件流的头字节中得到mime信息

    在写网络爬虫的时候,需要根据链接来获取文件类型,将内容正确存储.之前我都是根据链接的后缀来判断的,比如: http://img12.360buyimg.com/da/20120330/88_31_Zy ...