跳到主要内容

15.4.16 运算符

15.4.16.1 基础运算符

15.4.16.1.1 算数运算符

算数运算符包括:

运算符

作用

+

-

减/负号

*

/

%

取余

 — 

自减

++

自加

算数运算操作符支持 bool、byte、int、double 类型数据的操作,不同类型的变量如果放在一起进行加减乘除运算,会触发隐式转换。
各种算术运算符用法示例如下:
例 1

VAR int a = 1;
VAR int b = 2;
VAR int c = -b;      // 取负
VAR int ac = a * c;  // 乘法

例 2

++,-- 两个运算符又称单目运算符,是指对一个操作数进行操作的运算符,RL 不区分前后自加自减:
x = n++;   // n 先加1,再将 n 的值赋给 x
x = --n;   // n 先减1,再将新值赋给 x

例 3

不同类型变量的进行加减乘除运算的隐式转化结果

类型1 类型2 结果

bool

bool

bool

bool

byte

byte

bool

int

int

bool

double

double

byte

byte

byte

byte

int

int

byte

double

double

int

int

int

int

double

double

double

double

double

15.4.16.1.2 逻辑运算符

逻辑运算符支持基本数据类型的运算,包括:

运算符

作用

&&

逻辑与

II

逻辑或

<

小于

>

大于

小于等于

>=

大于等于

==

等于

!=

不等于

!

取逻辑非

逻辑与 && 表达式为真的条件是两边的结果都为真,而逻辑或 || 为真的条件是两边只要有一个条件为真即可。

例 1

其他逻辑运算符用法示例如下:
VAR int res = 1;
while(res < 3)      // 比较 res 是否小于 3
res++;
endwhile
di5 = !di6;         // 取逻辑非
VAR int counter = 4;
while(di7 && di8)   // 求逻辑与
if(counter == 5) // 是否相等
        break;
    endif
endwhile

15.4.16.1.3 赋值运算符

赋值运算符包括:

运算符

作用

=

赋值

+=

加等

-=

减等

*=

乘等

/=

除等

%=

取模等

各种赋值运算符用法示例如下

VAR int num1 = 3;
VAR int num2 = 4;
num1 += num2;  // 等同于 num1 = num1 + num2,num1 = 7。
num1 -= num2;  // 等同于 num1 = num1 - num2,num1 = -1。
num1 *= num2;  // 等同于 num1 = num1 * num2,num1 = 12。
num1 /= num2;  // 等同于 num1 = num1 / num2,num1 = 0。
num1 %= num2;  // 等同于 num1 = num1 % num2,num1 = 3。

变量所有赋值操作,都支持隐式转换。当赋值运算左右两边的数据类型不一致时,解释器会尝试触发隐式转换以使得程序能继续运行,当转换失败时,程序会报错停止。
Bool, Byte, Int, Double 四种数据类型之间能进行转换。IO、寄存器变量属于上面四种变量的特殊形式,如果它们用于赋值操作,也可触发隐式转换。
函数的返回值如果属于上面四种类型,也可作为赋值操作的右值,进行赋值计算。

例 1

int tmp_num = 10.5; // 10
bool tmp_bool = 1; // true
tmp_bool = 0; // false
double tmp_d = 999; // 999.0

例 2

// 直接用寄存器变量修改普通变量
double tmp_num = register0;
// 寄存器变量可以直接用于条件判断
WaitUntil(register0 == 10);

例 3

int mem_ret = StrMemb(“Robotics”, 2, “aeiou”);
// StrMemb 的返回值是 bool 类型,如果一定要用int类型接收返回值,
// 控制器不会报错,而是会进行隐式转换
// true-> 1, false-> 0

15.4.16.1.4 其他运算符

运算符

作用

( )

圆括号

.

点操作符

各运算符用法示例如下:
例 1

VAR int num = arr[1];            // 取数组第一个元素赋给 num
VAR int num2 = (1+2)*3;          // /使用括号可以改变运算顺序,这里 num2 的值为 9

例 2

定义一个 robtarget 变量 pt1
pt1.trans.x = 200;               // 使用 "." 操作符将 pt1 点的 x 坐标改为 200

使用限制:
“.” 操作符不支持对 robtarget 变量 A,B,C 成员的修改。

15.4.16.2 运算优先级

优先级 运算符 使用形式 结合方向

1

( )

(表达式) / 函数名(形参表)

.

变量名.

2

-

-表达式

右到左

++

++变量名 / 变量名++

 — 

--变量名 / 变量名--

!

! 表达式

3

/

表达式 / 表达式

左到右

*

表达式 * 表达式

%

表达式 % 表达式

4

+

表达式 + 表达式

左到右

-

表达式 - 表达式

5

>

表达式 > 表达式

左到右

>=

表达式 >= 表达式

<

表达式 < 表达式

表达式 ⇐ 表达式

6

==

表达式 == 表达式

左到右

!=

表达式 != 表达式

7

&&

表达式 && 表达式

左到右

8

||

表达式 || 表达式

左到右

9

=

变量 = 表达式

右到左

/=

变量 /= 表达式

*=

变量 *= 表达式

%=

变量 %= 表达式

+=

变量 += 表达式

-=

变量 -= 表达式