C语言的关系运算和逻辑运算

导语

C语言提供了可以进行逻辑判断的若干选择语句,由这些选择语句可构成程序中的选择构,通常又称为分支结构,它将根据逻辑判断的结果决定程序的不同流程。
选择结构是结构化程序设计的三种基本结构之一。本章将详细介绍如何在C程序中实选择结构。

一、关系运算和逻辑运算 

1、C语言的逻辑值

关系表达式和逻辑表达式的运算结果都会得到一个逻辑值。逻辑值只有两个,分别用“真”
和“假”来表示。在C语言中,没有专门的“逻辑值”,而是用非0表示”真”,用0表示“假”。因
此,对于任意一个表达式,如果值为0,就代表一个“假”值;如果值是非发,无论是正数还是负数,
都代表一个“真”值。

 2、关系运算符和关系表达式

关系运算是逻辑运算中比较简单的一种。所谓关系运算实际上是“比较运算”,即进行两个
数的比较,判断比较的结果是否符合指定的条件。 

3、C语言的关系运算符 
(1) <     (小于)  (3) <=    (小于或等于)
(2) >     (大于)(4) >=    (大于或等于)
(5)== (等于)(6)  !=        (不等于)

注意:1、由两个字符组成的运算符之间不允许有空格,如:<=就不能写成<=。

           2、关系运算符是双目运算符,具有自左至右的结合性。

           3、以上运算符中,前四种关系运算符(<、<=、2、>=)的优先级别相同,后两种(==、1=)优先
级相同,且前四种的优先级高于后两种。

           4、关系运算符、算术运算符和赋值运算符之间的优先级次序是:算术运算符的优先级别最高,关系运算符次之,赋值运算符的优先级别最低。

4、关系表达式及关系表达式的值 

   由关系运算符构成的表达式,称为关系表达式。关系运算符两边的运算对象可以是C语言中任意合法的表达式。例如,a>=b、(a=3)>(b=4)、a>c==c等都是合法的关系表达式。

   关系运算的值为“逻辑值”,只有两种可能:整数0或者整数1。例如,若变量a中的值为10,变量b中的值为6时,表达式a>=b为“真”,其值为1;若a中的值为10,b中的值为16时,表达式a>=b为“假”,其值为0。

   当关系运算符两边值的类型不一致时,例如一边是整型,另一边是浮点型,则系统将自动把整型数转换为浮点数,然后进行比较,其类型转换规则与附录3中所列双目算术运算符两边运算数的类型转换规则相同。若x和y都是浮点数,应当避免使用x==y这样的关系表达式,因为通常存放在内存中的浮点是有误差的,因此不可能精确相等,这将导致关系表达式x==y的值总是为0。

5、逻辑运算符和逻辑表达式

1、C语言的逻辑运算符 

(1)C语言提供了三种逻相运算符,分别是:(1)8&逻辑“与”           (2)逻辑“或”            (3)1逻辑”非”

其中,运算符8&和1为双目运算符,运算符!为单目运算符,出现在运算对象的左边。逻辑运算符具有自左至右的结合性。

   以上运算符的优先级次序是:!(逻辑“非”)级别最高,&&(逻辑“与”)次之,1(逻辑“或”)最低。

   逻辑运算符与赋值运算符、算术运算符、关系运算符之间从高到低的运算优先次序是:!(逻辑“非”)、算术运算符、关系运算符、&&(逻辑“与”)、1(逻辑“我”)、赋值运算符。

2、逻辑表达式和逻辑表达式的值

   由逻辑运算符和运算对象组成的表达式称为逻辑表达式。逻辑运算的对象可以是C语言
中任意合法的表达式。逻辑表达式的运算结果或者为1(“真”),或者为0(“d”)。例如:在关
系表达式(x>y)为真的条件下,若变量a的值为10,变量b的值为16,表达式(a>b)&&(x>y)为
“假”,表达式的值为0;若a值为10,b值为6,表达式(a>b)8&(x>y)为“真”,其值为1。由逻辑
运算符构成的逻辑表达式,其运算规则如表所示。 

a

b!a!ba&&ba||b
非00011
非000101
01001
001100

    值得注意的是,在数学上关系式0<x<10表示x的值应在大于0并且小于10的范围内,但在C语言中不能直接用0<x<10这样一个关系表达式来表述以上的逻辑关系。因为按照C语言的运算规则,表达式0<x<10首先进行0<x的运算,其值为0或1,因此无论x是什么值,表达式0<x<10的值总是1。

    对于这种情况,只有采用C语言提供的逻辑表达式0<x&&x<10才能正确表述以上关系。例如,当x的值为20时,左边关系表达式0<x的值为1,右边关系表达式x<10的值为0,“与”运算的结果为0;当x的值为-1时,左边关系表达式的值为0,右边关系表达式的值为1,“与”运算的结果仍为0;只有当x的值在0到10的范围内时,左右两边的关系表达式的值均为1,“与”运算的结果才为1。

   C语言中,由&&或||构成的逻辑表达式,在特定的情况下会产生“短路”现象。例如有以下逻辑表达式:
a++&&b++   若a的值为0表达式首先去求a++的值,由于表达式a++的值为(系统完全可以确定逻辑表达a0,式的运算结果总是为0,因此将跳过b++不再对它进行求值。在这种情况下,a的值将自增1,由0变成1,而b的值将不变。若a的值不为0,则系统不能仅根据表达式a++的值来确定逻辑表达式的运算结果,因此必然要再对运算符&&右边的表达式b++进行求值,这时将进行+的运算,使b的值改变。又如以下逻辑表达式:a++||b++   若a的值为1,表达式首先去求a++的值,由于表达式a++的值为1,无论表达式b++为何值,系统完全可以确定逻辑表达式的运算结果总是为1,因此也将跳过b++不再对它进行求值。在这种情况下,a的值将自增1,b的值将不变。若a的值为0,则系统不能仅根据表达式a++的值来确定逻辑表达式的运算结果,因此必然要再对运算符右边的表达式b++进行求值,这时将进行b++的运算,运算结果不仅使a的值改变,也改变了b的值。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值