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 | = (equality test)。 替代形式是 EQ。 检查两个操作数的值是否相等,如果相等,则条件变为 true。 实例 (A = B) is not true。 |
2 | <> (Inequality test)。 替代形式是 NE。 检查两个操作数的值是否相等如果值不相等,则条件变为 true。 实例 (A <> B) is true。 |
3 | > (Greater than test)。替代形式是 GT。 检查左操作数的值是否大于右操作数的值如果是,则条件变为 true。 实例 (A > B) is not true。 |
4 | < (Less than test)。 替代形式是 LT。 检查左操作数的值是否小于右操作数的值如果是,则条件变为 true。 实例 (A < B) is true。 |
5 | >= (Greater than or equals) 。替代形式是 GE。 检查左操作数的值是否大于或等于右操作数的值如果是,则条件变为 true。 实例 (A >= B) is not true。 |
6 | <= (Less than or equals test)。 替代形式是 LE。 检查左操作数的值是否小于或等于右操作数的值如果是,则条件变为 true。 实例 (A <= B) is true。 |
7 | a1 BETWEEN a2 AND a3 (Interval test) 检查 a1 是否位于 a2 和 a3 之间(包括 a2 和 a3)如果是,则条件变为 true。 实例 (A BETWEEN B AND C) is true。 |
8 | IS INITIAL 如果变量的内容没有更改并且已自动为其分配初始值,则条件变为 true。 实例 (A IS INITIAL) is not true |
9 | IS NOT INITIAL 如果变量的内容已更改,则条件变为 true。 实例 (A IS NOT INITIAL) is true。 |
以下是优先顺序:
- 如果一个字段的类型为 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(OR)运算符逐位比较每个字段的二进制运算符。 |
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 (Contains Only) 检查 A 是否仅由 B 中的字符组成。 |
2 | CN (Not Contains ONLY) 检查 A 是否包含不在 B 中的字符。 |
3 | CA (Contains ANY) 检查 A 是否至少包含 B 的一个字符。 |
4 | NA (NOT Contains Any) 检查 A 是否不包含任何 B 字符。 |
5 | CS (Contains a String) 检查 A 是否包含字符串 B。 |
6 | NS (NOT Contains a String) 检查 A 是否不包含字符串 B。 |
7 | CP (Contains a Pattern) 它检查 A 是否包含 B 中的模式。 |
8 | NP (NOT Contains a Pattern) 它检查 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.