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.
广告