C - 运算符 (关系操作符)

现在,读者已经学会了如何表示数据,接下来我们学习如何处理数据。C语言为处理数据提供了大量的操作,可以在程序中进行算术运算、比较值的大小、修改变量、逻辑的组合等。

关系操作符

这类操作符用于测试操作数之间的各种关系。C提供了所有常见的关系操作符。这些操作符是:

>=         <        <=   !=   ==

这些操作符产生的结果都是一个整型值,而不是布尔值。如果两端的操作数符合操作数指定的关系,表达式的结果是1,如果不符合,表达式的结果是0。关系操作符的结果是整型值,所以它可以赋值给整型变量,但通常它们用于if或while语句中,作为测值表达式。请记住这些语句的工作方式:表达式的结果如果是0,他被认为是假;表达式的结果如果是任何非零值,他被认为是真。所有关系操作符的工作原理相同,如果操作符两端的操作数不符合它指定的关系,表达式的结果为0。因此,单纯从功能上说,我们并不需要额外的布尔型表数据类型。

C用整数来表示布尔型值,这直接产生了一些简写方法,它们在表达式测值极为常用。
if( expression != 0) …
if( expression ) …

if( expression == 0) …
if( !expression ) …
在每对语句中,两条语句的功能是相同的。测试 “不等于0” 既可以用关系操作符来实现,也可以简单地通过测试表达式的值来完成。类似,测试“等于0”也可以通过测试表达式的值,然后再取结果的逻辑反来实现。你喜欢使用哪种形式纯属风格问题,但是在你使用最后一种形式时必须多加小心。由于!操作符的优先级很高,所以如果表达式内包含了其他操作符,你最好把表达式放在一对括号内。

警告:

如果说下面这个错误不是c程序员新手常见的错误,那么它至少也是最令人恼火的错误。绝大多数其他语言使用=操作符来比较相等性。在C中,你必须使用双等号==来执行这个比较,单个=号用于赋值操作。

这里的陷阱是:在测试相等性的地方出现赋值符是合法的,它并非是一个语法错误。这个不幸的特点正是C不具备布尔类型的不利之处。这两个表达式都是合法的整型表达式,所以它们在这个上下文环境中都是合法的。

如果你使用了错误的操作符,会出现什么后果呢?考虑下面这个例子:

x = get_some_value();
if( x = 5)
执行某些任务

x从函数获得一个值,但接下来我们把5赋值给x,而不是把x于字面值5进行比较,从而丢失了从函数获得的那个值。这个结果显然不是程序员的意图所在。但是,这里还存在另一个问题。由于表达式的值x的新值(非零值),所以if语句将始终为真。

你应该养成一个习惯,当你进行相等性测试比较时,你要检查一下你所书写的确实是双等号。当你发现你程序运行不正常时,赶快检查一下比较操作符有没有写错,这可能给你节省大量的调试时间。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值