热门问题
时间线
聊天
视角
关系运算符
来自维基百科,自由的百科全书
Remove ads
关系运算符在计算机科学的编程语言中,是测试或定义两个实体之间某种关系的构造或操作符。一共有六种关系,分别为:小于(<)
、大于(>)
、小于或等于(<=)
、大于或等于(>=)
、等于(==)
和不等于(<>)
。在具备布尔类型的编程语言中(如 Pascal,Ada 或 Java),这些运算符通常根据两个操作变量之间的条件关系是否成立,判定为真(True)或假(False)。诸如 C 语言中关系运算符传回整数 0 或 1,其中 0 表示假,任何非零值表示真。使用关系运算符创建的表达式,形成所谓的关系表达式或条件。
关系运算符可以被视为谓词逻辑的特殊情况。
![]() |
Remove ads
相等性
许多编程语言的构造和资料类型中都使用到相等性,用于测试元素是否已存在于集合中,或者借由键来访问值。它在切换(switch)语句,以及编程的逻辑并联过程中,用于将控制流调度到正确的分支。相等性的可能含义之一是“如果 a 等于 b,那么我们可以在任何情况下互换 a 或 b,而不会产生任何差异。”但这样的声明不一定成立,尤其在将可变性和内容等同性一起考虑时。
有时,特别是在面向对象编程中,对资料类型和继承对象进行比对时,出现了相等性和辨别的问题。以下情况通常需要区别:
- 相同类型的两个不同对象,例如两只手
- 两个对象相等但不同,例如两张10元钞票
- 两个对象相等但有不同的呈现,例如$1元纸钞和$1元硬币
- 对同一对象的两个不同引用,例如,同一人的两个昵称
在许多现代编程语言中会借由引用来访问对象和数据结构。在这些语言中,需要测试两种相等性质:
- 实质同等性:如果有两个引用A和B来自引用同一个对象,以A与对象进行的交互,跟借由B与对象进行的交互,两者其实就是相同作用而无法区别,特别是以A去改变对象的异动会反映在B之上。当讨论为值而非对象时,实质同等性并不适用。
- 语义同等性:如果两个引用对象或两个值在某种意义上是等价的:
第一种同等性质通常蕴涵着第二种同等性质(除了非数字类(not a number, NaN),它们不等于自身),但反向的同等性质并不一定成立。例如两个字符串对象可以是不同对象(第一种意义不相等),但它们包含相同的字符序列(第二种意义上相等)。有关此问题的更多信息,请参阅识别(identity)。
实数中包括许多简分数,无法以浮点算数精确地表示,所以需要在给定误差范围内来测试相等性。但这样的误差范围将打破一些例如传递性、反身性的要求性质:IEEE浮点标准是判断 Nan ≠ NaN 成立(NaN不等于自身)。
其他编程元素例如可计算的函数,可能没有相等性的意义,或者相等性是不能计算的。由于这些原因,一些语言以基类、接口、特点(trait)或协议的形式,定义了“可比较”的明确概念,以源码中的显式声明,被借由类型的结构,来使用关系运算。
JavaScript,PHP 和一些其它动态类型的语言中,如果两个值相等,等号运算符将计算为真,即使它们实际上为不同类型的对象,例如以数值4和字符串"4"相比较,结果会是相等。在这类语言中通常也会提供类型相等运算符,仅对具有相同或等价类型的对象比较返回真(在PHP 5中 4 ==="4"为假,但 4 =="4" 为真)。而在将数值0也当作布尔值为假的编程语言中,该运算符可化简为检查对象是否为数值零(例如,对于数值0或字符串"0"的x对象,使用类型相等运算符,则 x == 0 判断传回真值)。
次序比较
非数值资料的次序比较(大于或小于)运算是根据排序惯例(例如字符串依照编程语言内定的字典次序,和/或可由开发人员设置的)。当两个资料项 a 和 b 之间的比较结果,要和数值关系时,通常惯例是如果 a < b 则结果赋值为 -1,如果 a = b 则为 0,如果 a > b 则为 1。例如C语言的函数strcmp
执行三方向比较,并根据此惯例返回 -1, 0 或 1,而qsort
预期比较函数依此惯例返回值。在排序算法中比较方法源码的效率至为关键,因为它是排序性能的主要因素之一。
开发人员定义的资料类型(不是编程语言内置的类型)的比较,可以编写自定义的或使用函数库的函数(如上文的strcmp
)来执行,或者在某些语言中通过重载比较运算符-即以开发人员的定义指派给比较运算符,来比较特定资料类型。另一个选择是使用某些惯例,例如成员比较。
逻辑等价
虽然一开始可能不那么显而易见,像布尔逻辑运算符 XOR,AND,OR 和 NOT,这些关系运算符可以设计为具有逻辑等同性,使得它们都可以相互定义。对于任何给定的 x 和 y 值,以下四个条件语句都有相同的逻辑等价性 E(全为真或全为假):
这依赖于域是良好排序的。
Remove ads
标准关系运算符
语法
另见
参考
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads