SAP ABAP 运算符
ABAP提供了一组丰富的运算符来操纵变量。 所有ABAP运算符分为四类 :
1、算术运算符
2、比较运算符
3、按位运算符
4、字符串运算符
算术运算符
算术运算符在数学表达式中使用的方式与在代数中使用的方式相同。 以下列表描述了算术运算符。 假设整数变量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。 检查左操作数的值是否大于右操作数的值。 如果是,则条件变为true。 示例(A> B)不是真的。 |
4 | < (小于测试)。 替代形式是LT。 检查左操作数的值是否小于右操作数的值。 如果是,则条件变为true。 示例(A |
5 | > =(大于或等于)替代形式为GE。 检查左操作数的值是否大于或等于右操作数的值。 如果是,则条件变为true。 示例(A> = B)不是真的。 |
6 | < =(小于或等于测试)。 替代形式是LE。 检查左操作数的值是否小于或等于右操作数的值。 如果是,则条件变为true。 示例(A |
7 | a1 BETWEEN a2 AND a3(间隔测试) 检查a1是否在a2和a3之间(包括)。 如果是,则条件变为真。 示例(A BETWEEN B和C)为真。 |
8 | IS INITIAL 如果变量的内容没有改变,并且它已被自动赋予其初始值,则条件为真。 示例(A IS INITIAL)不为真 |
9 | 不是初始 如果变量的内容已更改,则条件为真。 示例(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 | 和 | 要么 | 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.