比较规则

比较规则

=, EQ, <>, NE, <, LT, >, GT, <=, LE, >=, GE

非引用数据类型的兼容要求

l  就基本类型来说,需要类型、长度(for the types c, n, p, x)、小数位(for the type p)匹配

l  对于结构来说,要求必须具有相同的组成成份(组件声明的顺序与类型),并且相对应的组件必须是兼容的,与名称没有关系

l  对于内表来说,行类型必须兼容,与内表的类型与关键字没有关系。

兼容基本类型之间的比较

兼容类型数据之间的比较是不会发生类型转换的:

  • 数字类型 (i, f, p)之间的比较,会按照所存储的数字值的大小进行比较。由于f类型依赖于平台,会有误差,不要对f类型进行相等相关的比较.
  • 字符类型(c, d, n, t, string) 之间的比较,会从左到右逐个字符进行比较。如果两个操作数都是n类型时,会转换为对应数字后进行比较。
  • 字节类型(x, xstring),之间的比较,会从左到右逐字节进行比较

非兼容基本类型之间的比较

如果不兼容的两个基本类型数据之间进行比较,会根据以下规则进行转换:

类型相同但长度不同之间的比较
  • 如果操作数都是p,则会比较数字值的大小。
  • 针对c类型的操作数,短操作数的长度会在右边添加空格扩展到长的操作数同样长度后再进行比较。
  • 不同长度的string类型操作数通常是不相等的。

DATA: str1 TYPE string VALUE `AA`,
      str2
TYPE string VALUE `AA `.str1会小于
str2

DATA: str1 TYPE string VALUE 'AA',
      str2
TYPE string VALUE 'AA '.
相等

  • 针对n类型的两个操作数,会在较短操作数左边补上0直到与较长操作数长度相等。
  • 针对x类型的两个操作数,会在较短操作数左边补上十六进制0直到与较长操作数长度相等。
  • 不同长度的Xstring类型操作数通常是不相等的.
不同类型之间的比较

只有比较时才有以下的优先级,赋值转换时不会存在这种优先级,因为赋值之前就已经确了目标类型,但比较时是要在运行时才能动态的决定,这种决定时就会用到下面的优先级规则

 

如果进行比较的操作数类型不同,则会先按照以下优先顺序确定要转换的类型,然后再根据基本类型转换规则表进行转换,最后再进行比较:

  1. 如果其中某个操作数类型为数字类型fpi,则会按照先f、再p、最后i的优先转换次序进行转换(与Java转换规则是一样的:如果有f,则转换为f;如果没有f,但有p时,转换为p;如果既没有f,也没有p,而存在i时,则转换为i类型)。
  2. 否则,如某个操作数是d或者是t类型,且另一个操作数为数字类型(i, f, p),则dt转换为相应的数字类型。
  3. 否则,如果某个操作数是d或者t,另一个操作数是除dt类型外的字符类型(c, n, string)时,则dt将被当作字符类型进行处理。如果一操作是d而另一个是t时,则会抛出异常。
  4. 否则,如果某一个操作数为n,另一个操作数为c, string, x, or xstring时,两个操作数都会转换为p类型。
  5. 否则,如果某个操作数为固定长度类型(c or x),另一个操作数为变长类型(string or xstring)时,固定长度类型的操作数会被转换为相应的可变长度的类型(c to string, x to xstring)
  6. 否则,如果一个操作数为字节类型(x, xstring),另一个为字符类型(c, string),则字节类型被转换为相应字符类型(x to c, xstring to string)

转载于:https://www.cnblogs.com/jiangzhengjun/p/4293207.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】《从入门到精通云服务器》第六讲—OpenStack基础

前五期的《从入门到精通云服务器》受到了广泛好评&#xff0c;收到留言&#xff0c;有很多读者对云计算相关的技术非常感兴趣。应观众要求&#xff0c;我们这期要安利一条纯技术内容。准备好瓜子、花生&#xff0c;随小编一起进入OpenStack 基础知识大讲堂吧。 了解OpenStack O…

C#中泛型约束的具体用法

前言上一篇博文简单介绍了泛型的约束&#xff0c;说是通过where<>来实现具体委托占位符的约束。那么约束又有什么类型和次序呢。这篇文章咱们一起看看。目前共5种类型的约束。类名&#xff1a;只有这个类型的类或从它继承的类才能用作类型实参class&#xff1a;任何引用类…

python自动注册邮箱_[转][Python][自动登录163邮箱]

#-*- coding:UTF-8 -*-import urllib,urllib2,cookielibimport xml.etree.ElementTree as etree #xml解析类class Login163:#伪装browserheader {User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6}username passwd co…

系统架构:Web应用架构的新趋势 前后端分离的想法

最近研究servlet&#xff0c;看书时候书里讲到了c/s架构到b/s架构的演变&#xff0c;讲servlet的书都很老了&#xff0c;现在的b/s架构已经不是几年前的b/s架构&#xff0c;其实b/s架构就是web应用开发&#xff0c;对于这样的架构我们现在应该考虑的是前端和后端的分离&#xf…

linux网络编程之inet_addr和inet_ntoa使用总结

1、介绍inet_addr函数 inet_addr函数转换网络主机地址(如192.168.1.10)为网络字节序二进制值,如果参数char *cp无效,函数返回-1(INADDR_NONE),这个函数在处理地址为255.255.255.255时也返回-1,255.255.255.255是一个有效的地址,不过inet_addr无法处理 in_addr_t inet_add…

高并发高可靠性系统思考1

CPU不是瓶颈&#xff0c;网络才是&#xff1b; 墨菲定律&#xff1a;任何事情都没表面看起来那么简单&#xff1b;会出错的总会出错&#xff1b; 可靠性&#xff1a; 集群&#xff1a;无状态集群&#xff1b;有状态集群&#xff0c;很难处理&#xff0c;尽量剥离出状态部分做集…

Asp-Net-Core学习笔记:身份认证入门

前言过年前我又来更新了~我就说了最近不是在偷懒吧&#xff0c;其实这段时间还是有积累一些东西的&#xff0c;不过还没去整理……所以只能发以前没写完的一些笔记出来就当做是温习一下啦PS&#xff1a;之前说的红包封面我还没搞&#xff0c;得抓紧时间了最近在准备搞一个我之前…

第1章 大数据挖掘及应用概论

《大数据挖掘及应用》学习笔记。 第1章 大数据挖掘及应用概论 数据挖掘是数据分析的提升。 1.1 大数据智能分析处理的普及和应用 1.1.1 云计算(cloud computing) 云计算是一种按使用量付费的模式&#xff0c;这种模式提供可用的、便捷的、按需的网络访问&#xff0c;进入可配…

python手机自动化截图_python UI自动化截图对比

目前有个想法&#xff0c;就是将UI截图与自动化截图进行对比。不一致的情况下提示错误截图对比方法有&#xff1a;import cv2import numpy as np# 均值哈希算法def aHash(img):# 缩放为8*8img cv2.resize(img, (8, 8))# 转换为灰度图gray cv2.cvtColor(img, cv2.COLOR_BGR2GR…

浮点型数据的输出格式

2019独角兽企业重金招聘Python工程师标准>>> float的占位符为f%,默认输出六位小数&#xff0c;如果要限制位数的输出&#xff0c;可以用%.2f这样的格式&#xff0c;double同上。 如果是浮点型转换成整型不会进行四舍五入&#xff0c;浮点型的输出如果截取了位数进行…

linux网络编程之用socket实现简单客户端和服务端的通信(基于TCP)

一、介绍基于TCP协议通过socket实现网络编程常用API 1、读者如果不是很熟悉,可以先看我之前写的几篇博客,有socket,地址结构的理解,更加方便读者理解 地址分别是: 1)、http://blog.csdn.net/u011068702/article/details/56479927 2)、http://blog.csdn.net/u01106870…

VS2010下Boost1.55.0配置

为什么80%的码农都做不了架构师&#xff1f;>>> 打开程序菜单&#xff0c;选择Visual Studio Tools里面的 Visual Studio 命令提示。转到解压后的Boost所在目录&#xff0c;输入Bootstrap&#xff0c;执行完毕会生成b2.exe。输入&#xff08;目录下的bjam.exe和b2.…

Linux信号实践(3) --信号内核表示

信号在内核中的表示执行信号的处理动作称为信号递达&#xff08;Delivery&#xff09;&#xff0c;信号从产生到递达之间的状态&#xff0c;称为信号未决&#xff08;Pending&#xff09;。进程可以选择阻塞&#xff08;Block&#xff09;某个信号。被阻塞的信号产生时将保持在…

第2章 数据认知与预处理

《大数据挖掘及应用》学习笔记。 第2章 数据认知与预处理 2.1 数据分析的定义和流程 数据分析(data analysis)是指用适当的统计分析方法对收集来的大量数据进行分析和解释&#xff0c;提取出有用的信息形成结论&#xff0c;从而对数据加以详细研究和概括总结的过程。 2.1.1 如…

9 C++ Boost 多线程,线程同步

线程的创建 boost_thread,boost_system 多线程的创建 线程的参数传递 线程的创建方式 线程的join 加入join,回收线程线程中断 线程中断2, 线程组 boost 线程的死锁 boost 线程递归锁 线程互斥锁,线程同步 unique_lock 锁,离开作用域自动释放 unique_lock 锁 示例 2,可以显式的释…

命令注入_命令注入绕过方式总结

前言命令注入是web中常见的漏洞之一&#xff0c;由于web应用程序未对用户提交的数据做严格的过滤&#xff0c;导致用户输入可以直接被linux或windows系统当成命令执行&#xff0c;一般都会造成严重的危害。常用符号分号(;)多条语句顺序执行时的分割符号。1cmd1;cmd2管道符(|)cm…

linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)

1、sendto和recvfrom函数介绍 sendto(经socket传送数据) 相关函数 send , sendmsg,recv , recvfrom , socket表头文件 #include < sys/types.h > #include < sys/socket.h >定义函数 int sendto ( int s , const void * msg, int len, unsigned int flags, const…

redis缓存设计要点随谈

在高并发系统中&#xff0c;缓存是必不可少的一部分。没有缓存对系统的加速和阻挡大量的请求直接落到系统的数据库&#xff0c;系统是很难撑住高并发的冲击。所以缓存设计是系统很关键的一环。1、缓存更新缓存的数据一般都是有有效期的&#xff0c;过了一段时间之后就会失效&am…

集合的结构示意图

转载于:https://blog.51cto.com/8467007/1364724

Java设计模式(8)组合模式(Composite模式)

Composite定义&#xff1a;将对象以树形结构组织起来&#xff0c;以达成“部分&#xff0d;整体” 的层次结构&#xff0c;使得客户端对单个对象和组合对象的使用具有一致性。Composite比较容易理解&#xff0c;想到Composite就应该想到树形结构图。组合体内这些对象都有共同接…