codecamp

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
00000
01011
10011
11110

字符串运算符

以下是字符串运算符的列表 -

编号字符串操作符和说明
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.


SAP ABAP 常量和字面量
SAP ABAP 回路控制
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }