关系运算子在计算机科学的编程语言中,是测试或定义两个实体之间某种关系的构造或操作符。这些包括数值等式和不等式(例如 5 = 5 和 4≥3)。在具备布尔型别的编程语言中(如 Pascal,Ada 或 Java),这些运算符通常根据两个操作变量之间的条件关系是否成立,判定为真或假。诸如 C 语言中关系运算子返回整数 0 或 1,其中 0 表示假,任何非零值表示真。使用关系运算子创建的表达式,形成所谓的关系表达式或条件。 关系运算子可以被视为谓词逻辑的特殊情况。

中文名

关系运算子

性    质

谓词逻辑的特殊情况内    容

领    域

计算机

关系运算子相等性

编辑

语音

关系运算子用法

在许多编程语言构造和资料型别中都使用到相等性,它用于测试元素是否已存在于集合中,或者借由键来存取值。它在切换(switch)语句,以及编程的逻辑并联过程中,用于将控制流调度到正确的分支。相等性的可能含义之一是“如果 a 等于 b,那么我们可以在任何上下文中互换 a 或 b,而不会产生任何差异。但这样的声明不一定成立,尤其在可变性和内容等同性一起考虑时。[1]

关系运算子物件相等与内容等同性

有时,特别是在面向对象编程中,对资料型别和继承物件进行比对时,出现了相等性和辨别的问题。以下情况通常需要区别:相同型别的两个不同物件,例如两只手

两个物件相等但不同,例如两张10元钞票

两个物件相等但有不同的呈现,例如$1元纸钞和$1元硬币

对同一物件的两个不同参照,例如,同一人的两个昵称

在许多现代编程语言中会借由参照来存取物件和数据结构。在这些语言中,需要测试两种相等性质:实质同等性:如果有两个参照A和B来自引用同一个物件,以A与物件进行的互动,跟借由B与物件进行的互动,两者其实就是相同作用而无法区别,特别是以A去改变物件的异动会反映在B之上。当讨论为值而非物件时,实质同等性并不适用。

语义同等性:如果两个参照物件或两个值在某种意义上是等价的:结构等式(即它们的内容是相同的),或浅薄地(仅测试目前部分)或深入地(递归地测试其所有部分的相等性)。实现这一点的简易方法是通过代表等式:检查参照的值是否有相同的代表式。

其它特制的同等性,保留外部行为。例如将和视为有理数时,被判断是相等的。除了反射性、对称性和传递性之外,对 A = B 特制的定义可能是“当且仅当对于物件A和物件B之上的所有操作,都将具有相同的结果时,则 A = B ”。

第一种同等性质通常蕴涵着第二种同等性质(除了非数字类(not a number, NaN),它们不等于自身),但反向的同等性质并不一定成立。例如两个字串物件可以是不同物件(第一种意义不相等),但它们包含相同的字元序列(第二种意义上相等)。有关此问题的更多信息,请参阅识别(identity)。

实数中包括许多简分数,无法以浮点算数精确地表示,所以需要在给定误差范围内来测试相等性。但这样的误差范围将打破一些例如传递性、反身性的要求性质:IEEE浮点标准是判断 Nan ≠ NaN 成立(NaN不等于自身)。

其他编程元素例如可计算的函数,可能没有相等性的意义,或者相等性是不能计算的。由于这些原因,一些语言以基础类别、界面、特点(trait)或协定的形式,定义了“可比较”的明确概念,以源码中的显式声明,被借由型别的结构,来使用关系运算。[1]

关系运算子比较不同类型的值

JavaScript,PHP 和一些其它动态型别的语言中,如果两个值相等,等号运算符将计算为真,即使它们实际上为不同型别的物件,例如以数值4和字串"4"相比较,结果会是相等。在这类语言中通常也会提供型别相等运算子,仅对具有相同或等价型别的物件比较返回真(在PHP 5中 4 ==="4"为假,但 4 =="4" 为真)。而在将数值0也当作布尔值为假的编程语言中,该运算子可化简为检查物件是否为数值零(例如,对于数值0或字串"0"的x物件,使用型别相等运算子,则 x == 0 判断传回真值)。[1]

关系运算子次序比较

编辑

语音

非数值资料的次序比较(大于或小于)运算是根据排序惯例(例如字串依照编程语言内定的字典次序,和/或可由开发人员设定的)。当两个资料项 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(全为真或全为假):

这依赖于域是良好排序的。

关系运算子语法

编辑

语音

关系运算子也用于技术文献而不是单词,如果编程语言支援通常以中缀表示法,亦即出现在其操作变量(两个表达式是相关的)之间。 举例而言如果 x 小于 y,在Python中的表达式将印出句子:if x

其他编程语言如 Lisp 使用前缀表示法,如下所示:

(>= X Y)

关系运算子操作符链接

链接关系在数学中是普遍的写法,例如 3 < x < y < 20 表示 3 < x 而且 x < y 而且 y <20。语义是很清楚的,因为数学中这些关系运算是有传递性的。然而,许多最近的编程语言会把 3 < x < y 的表达式,看作两个左(或右)关系运算子的组合,而解译为(3 < x ) < y。如果我们设 x = 4 则得到(3 < 4 )< y,而运算式变成true < y,这是无意义的。但它却可能通过 C/C++ 和一些其它语言的编译(因为 true 会以数值1代表)。

有些编程语言如Python和Perl 6 能正确给出x < y < z表达式所代表的数学意义,其它种语言则不, 部分是因大多数运算符在C语言种类中,以中缀表示法的运作方式有所不同。D编程语言保持与C的一些兼容性,而“允许C语言表达式却有微妙不同的语义(虽然可说是方向正确),与便利性比起来造成更多的混淆”。

有些语言如 Common Lisp,对此则使用多参数谓词。当x在 1 和 10 之间时,评估比较运算式(<= 1 x 10)结果为真。[2]

关系运算子与赋值运算子的混淆情况

早期(公元1956-57年)FORTRAN编程语言受限于有限的字集,其中等号“=”是唯一的关系运算子。

没有数学上通用的大于“”关系符号(当然也就没有不大于“≤”或不小于“≥”之类的关系符号),

迫使设计者定义如.GT.、.LT.、.GE.、.EQ.这样子的关系符号, 随后等号“=”字符被人藉用来执行复制,

尽管此用法与数学意义明显不一致(X = X + 1 在数理是不能成立的)。

因此国际代数语言(IAL,ALGOL 58)和 ALGOL(1958和1960)引入了“:=”表示赋值操作,

留下等号“=”字符作为相等关系的标准,遵循这个惯例的编程语言有CPL,ALGOL W,ALGOL 68,BCPL,

Simula,SET(SETL),Pascal,Smalltalk,Modula-2,Ada,Standard ML,OCaml,Eiffel,Object Pascal(Delphi),Oberon,Dylan,VHSIC(VHDL)等。[2]

关系运算子B 和 C 编程语言

大多数编程语言遵循的这种事实标准,后来被名为B的极简编译语言间接改变。它唯一的应用目标是作为

(一个非常原始的)Unix的最初移植版本,但它也演变成非常有影响力的 C 编程语言。

B 最初是系统编程BCPL的语法变体,简化(无型别)的CPL版本。在描述为 “拆解” 过程的情况下,

BCPL的交集和联集运算子被替换为&和|(后来变成&&和||)。

同样的过程中,原来具有ALGOL风格在BCPL语言中表示赋值操作的:=符号,在B语言中被替换为=。

导致这种演变过程的原因未知。由于变量赋值在B语言中没有特殊语法(例如 let 或类似),而在表达式中

允许这个操作,所以等号的传统语义(相等关系)和非标准涵义(变量赋值)另外相关联在一起。为了区分

这两种意义,因此Ken Thompson使用了特别的双等号==组合取代相等关系判断。

一个小的型别系统后来被引入,B接着演变成C。C语言的普及与Unix的关联,使Java,C#和许多其他语言

沿用这种语法,虽然已经大不相同于等号的数学关系涵义。[2]

参考资料

1.

Patent application: On May 14, 2003, US application 20,040,230,959 "IS NOT OPERATOR" was filed for the ISNOT operator by employees of Microsoft. This patent was granted on November 18, 2004

2.

钟型义. 用三参数关系计算Z和k_т值[J]. 压缩机技术, 1983(3):3-5.

计算机关系差运算图解,关系运算子相关推荐

  1. 计算机关系差运算与交运算的区别,计算机二级 公基础——关系运算.ppt

    计算机二级 公基础--关系运算 计算机二级公共基础--关系运算 赏俺斗豫啊杠钱撒镶溪坎辫锡沿妈童党贡磐后惨淘未换忌惜器沂练敛谰欠计算机二级 公基础--关系运算计算机二级 公基础--关系运算 关系代数的 ...

  2. 高等数学与计算机的关联论文,数学建模与计算机关系研究的相关论文(2)

    数学建模与计算机关系研究的相关论文篇二 <数学建模与计算机关系研究> [摘要]高等数学与计算机教学具有内在相关性,尤其是在数学建模应用中,根据计算机学科发展来发挥数学建模理论的作用及效果, ...

  3. 计算机发展对自动化影响,我多对自动化与计算机关系的看法.doc

    我多对自动化与计算机关系的看法 <我对自动化与计算机关系的看法> 2010级环境工程1班 江莹 100205011119 自动化以及计算机这两个词语对于我们来说并不陌生,究其原因,主要是因 ...

  4. 数学计算机关系论文2000字,数学与计算机关系论文

    数学与计算机关系论文 目录 一. 高等数学 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙2 1. 为什么要学习高等数学 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙2 2. 高等数学的分类 ∙∙∙∙ ...

  5. 史上最受程序员待见的计算机入门读物——图解X系列

    你有时想把书扔掉的痛苦我都心疼 想为你解决入门难的问题 -- 专治各种入门疑难杂症,别扔鸡蛋,你得试试. 特别棒的入门系列,这实力不是盖的.到目前为止,图灵日语图解系列已经出版8本书,其极简和形象生动 ...

  6. 数学计算机关系论文2000字,数学与计算机科学论文2000字_数学与计算机科学毕业论文模板...

    导读:如何撰写出满意的数学与计算机科学论文是现在很多人都为之苦恼的问题之一,而论文的撰写也并非易事,必定是需要花费很多心思和汗水的,本论文分类为计算机科学论文,下面是小编为大家整理的几篇数学与计算机科 ...

  7. 数学与计算机专业的论文,数学与计算机关系论文.doc

    目录 一.高等数学2 1.为什么要学习高等数学2 2.高等数学的分类2 3.高等数学的应用3 1)生活上3 2)科技上3 4.高等数学发展阶段4 1) 解析几何学建立4 2) 微积分的创立4 3) 集 ...

  8. 云计算机教室布置图,图解:颠覆传统 带你走进升腾云教室

    原标题:图解:颠覆传统 带你走进升腾云教室 你还记得小时候全班人排着队上微机课的情景吗?你还记得每次进计算机教室时都需要先换上脚套吗?你还记得每次上课时计算机"嗡嗡"作响的声音吗? ...

  9. 英语和计算机关系论文开题报告,计算机论文开题报告范文

    计算机技术改变了人们的生活方式和工作方式,影响社会的方方面面,应用好计算机技术可以促进社会发展,提高人们生活水平.下面是小编为大家整理的计算机论文,供大家参考. 计算机论文范文一:计算机教育中科学技术 ...

最新文章

  1. python时区转换_在python 不同时区之间的差值与转换方法
  2. Python组织文件 实践:查找大文件、 用Mb、kb显示文件尺寸 、计算程序运行时间...
  3. Python列表排序 reverse、sort、sorted 操作方法详解
  4. 每日一题(7) —— 求余运算符
  5. [JavaScript] DOM
  6. js数字比较【牢记】
  7. java多商户商城系统源码下载
  8. 烟草MES系统介绍-序
  9. 接口耗时优化与cpu飙高解决
  10. 15亿美元买个“便宜货”
  11. 腾达路由器怎么设置网站服务服务器,腾达(Tenda)-无线路由器如何设置上网?
  12. rust怎么发送求救信号_海上遇险怎么发求救信号?
  13. 贫富差距,不是收入分化,而是资产分化
  14. Python实现isPrime()函数,参数为整数,要有异常处理。如果整数是质数,返回True,否则返回False。通过调用isPrime()函数,打印200以内的所有质数,以空格分割。
  15. Android安卓麻将识别源码Demo( 三)
  16. js 中的 Event Loop 以及 宏任务 与 微任务
  17. systemverilog-static和automatic
  18. 印象笔记使用中本地笔记丢失,程序员用技术手段完美找回
  19. 美国知名外遇社交网站AshleyMadison被黑
  20. 虚拟机繁忙——无法关闭,怎么办

热门文章

  1. 解决 Unresolved variable $ 的两种方法
  2. 阿里云OSS开启Sts临时访问控制
  3. jquery中如何获取select 下拉框默认选中的值?
  4. PHP怎么合并元素不等的数组_php合并数组中相同元素的方法
  5. Unity 实现 (刮刮卡/刮刮乐) 效果
  6. 让iphone可装android双启动,iPhone 4可安Android实现双系统启动
  7. c语言 统计字符串当中的大写字母个数和小写字母个数
  8. 自控力--凯利.麦格尼格尔 ——速读笔记
  9. android扫描隐藏wifi,安卓手机连接隐藏wifi 安卓连接隐藏wifi密码-192路由网
  10. 计算几何与图形学有关的几种常用算法(一)