- SAP ABAP 教程
- SAP ABAP - 首页
- SAP ABAP - 概述
- SAP ABAP - 环境
- SAP ABAP - 屏幕导航
- SAP ABAP - 基本语法
- SAP ABAP - 数据类型
- SAP ABAP - 变量
- SAP ABAP - 常量和字面量
- SAP ABAP - 运算符
- SAP ABAP - 循环控制
- SAP ABAP - 决策
- SAP ABAP - 字符串
- SAP ABAP - 日期和时间
- SAP ABAP - 数据格式化
- SAP ABAP - 异常处理
- SAP ABAP - 字典
- SAP ABAP - 域
- SAP ABAP - 数据元素
- SAP ABAP - 表
- SAP ABAP - 结构
- SAP ABAP - 视图
- SAP ABAP - 搜索帮助
- SAP ABAP - 锁对象
- SAP ABAP - 模块化
- SAP ABAP - 子程序
- SAP ABAP - 宏
- SAP ABAP - 函数模块
- SAP ABAP - 包含程序
- SAP ABAP - Open SQL 概述
- SAP ABAP - Native SQL 概述
- SAP ABAP - 内部表
- SAP ABAP - 创建内部表
- ABAP - 填充内部表
- SAP ABAP - 复制内部表
- SAP ABAP - 读取内部表
- SAP ABAP - 删除内部表
- SAP ABAP - 面向对象
- SAP ABAP - 对象
- SAP ABAP - 类
- SAP ABAP - 继承
- SAP ABAP - 多态
- SAP ABAP - 封装
- SAP ABAP - 接口
- SAP ABAP - 对象事件
- SAP ABAP - 报表编程
- SAP ABAP - 对话编程
- SAP ABAP - 智能表单
- SAP ABAP - SAPscript
- SAP ABAP - 客户出口
- SAP ABAP - 用户出口
- SAP ABAP - 业务附加功能
- SAP ABAP - Web Dynpro
- SAP ABAP 有用资源
- SAP ABAP - 问答
- SAP ABAP - 快速指南
- SAP ABAP - 有用资源
- SAP ABAP - 讨论
SAP ABAP - 运算符
ABAP 提供了一套丰富的运算符来操作变量。所有 ABAP 运算符分为四类:
- 算术运算符
- 比较运算符
- 位运算符
- 字符字符串运算符
算术运算符
算术运算符在数学表达式中的使用方式与代数中的使用方式相同。以下列表描述了算术运算符。假设整数变量 A 为 20,变量 B 为 40。
序号 | 算术运算符及描述 |
---|---|
1 | + (加法) 将运算符两侧的值相加。例如:A + B 将得到 60。 |
2 | − (减法) 从左操作数中减去右操作数。例如:A − B 将得到 -20。 |
3 | * (乘法) 将运算符两侧的值相乘。例如:A * B 将得到 800。 |
4 | / (除法) 将左操作数除以右操作数。例如:B / A 将得到 2。 |
5 | MOD (取模) 将左操作数除以右操作数并返回余数。例如:B MOD A 将得到 0。 |
示例
REPORT YS_SEP_08. DATA: A TYPE I VALUE 150, B TYPE I VALUE 50, Result TYPE I. Result = A / B. WRITE / Result.
以上代码产生以下输出:
3
比较运算符
让我们讨论不同操作数的各种类型的比较运算符。
序号 | 比较运算符及描述 |
---|---|
1 | = (相等性测试)。替代形式为 EQ。 检查两个操作数的值是否相等,如果相等则条件为真。例如 (A = B) 不为真。 |
2 | <> (不等性测试)。替代形式为 NE。 检查两个操作数的值是否相等。如果值不相等,则条件为真。例如 (A <> B) 为真。 |
3 | > (大于测试)。替代形式为 GT。 检查左操作数的值是否大于右操作数的值。如果是,则条件为真。例如 (A > B) 不为真。 |
4 | < (小于测试)。替代形式为 LT。 检查左操作数的值是否小于右操作数的值。如果是,则条件为真。例如 (A < B) 为真。 |
5 | >= (大于或等于)。替代形式为 GE。 检查左操作数的值是否大于或等于右操作数的值。如果是,则条件为真。例如 (A >= B) 不为真。 |
6 | <= (小于或等于测试)。替代形式为 LE。 检查左操作数的值是否小于或等于右操作数的值。如果是,则条件为真。例如 (A <= B) 为真。 |
7 | a1 BETWEEN a2 AND a3 (区间测试) 检查 a1 是否位于 a2 和 a3 之间(包含)。如果是,则条件为真。例如 (A BETWEEN B AND C) 为真。 |
8 | IS INITIAL 如果变量的内容未更改且已自动分配其初始值,则条件为真。例如 (A IS INITIAL) 不为真。 |
9 | IS NOT INITIAL 如果变量的内容已更改,则条件为真。例如 (A IS NOT INITIAL) 为真。 |
注意 - 如果变量的数据类型或长度不匹配,则会执行自动转换。在比较两种不同数据类型的两个值时,会对其中一个或两个值执行自动类型调整。转换类型由数据类型和数据类型的优先级顺序决定。
以下是优先级顺序:
如果一个字段类型为 I,则另一个字段将转换为类型 I。
如果一个字段类型为 P,则另一个字段将转换为类型 P。
如果一个字段类型为 D,则另一个字段将转换为类型 D。但 C 和 N 类型不会转换,它们将直接进行比较。类型 T 也是如此。
如果一个字段类型为 N,另一个字段类型为 C 或 X,则两个字段都将转换为类型 P。
如果一个字段类型为 C,另一个字段类型为 X,则 X 类型将转换为类型 C。
示例 1
REPORT YS_SEP_08. DATA: A TYPE I VALUE 115, B TYPE I VALUE 119. IF A LT B. WRITE: / 'A is less than B'. ENDIF
以上代码产生以下输出:
A is less than B
示例 2
REPORT YS_SEP_08. DATA: A TYPE I. IF A IS INITIAL. WRITE: / 'A is assigned'. ENDIF.
以上代码产生以下输出:
A is assigned.
位运算符
ABAP 还提供了一系列位逻辑运算符,可用于构建布尔代数表达式。位运算符可以使用括号等组合成复杂的表达式。
序号 | 位运算符及描述 |
---|---|
1 | BIT-NOT 一元运算符,它将十六进制数中的所有位翻转为相反的值。例如,将此运算符应用于具有位级值 10101010(例如 'AA')的十六进制数将给出 01010101。 |
2 | BIT-AND 此二元运算符使用布尔 AND 运算符逐位比较每个字段。 |
3 | BIT-XOR 二元运算符,使用布尔 XOR(异或)运算符逐位比较每个字段。 |
4 | BIT-OR 二元运算符,使用布尔 OR 运算符逐位比较每个字段。 |
例如,下表显示了对字段 A 和字段 B 中包含的两个位值应用布尔 AND、OR 或 XOR 运算符时生成的的值。
字段 A | 字段 B | AND | OR | XOR |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
字符字符串运算符
以下列出了字符字符串运算符:
序号 | 字符字符串运算符及描述 |
---|---|
1 | CO (仅包含) 检查 A 是否仅由 B 中的字符组成。 |
2 | CN (不包含仅) 检查 A 是否包含不在 B 中的字符。 |
3 | CA (包含任何) 检查 A 是否至少包含 B 的一个字符。 |
4 | NA (不包含任何) 检查 A 是否不包含 B 的任何字符。 |
5 | CS (包含字符串) 检查 A 是否包含字符字符串 B。 |
6 | NS (不包含字符串) 检查 A 是否不包含字符字符串 B。 |
7 | CP (包含模式) 它检查 A 是否包含 B 中的模式。 |
8 | NP (不包含模式) 它检查 A 是否不包含 B 中的模式。 |
示例
REPORT YS_SEP_08. DATA: P(10) TYPE C VALUE 'APPLE', Q(10) TYPE C VALUE 'CHAIR'. IF P CA Q. WRITE: / 'P contains at least one character of Q'. ENDIF.
以上代码产生以下输出:
P contains at least one character of Q.