PowerScript 操作符和表达式
操作符的功能包括:算术运算;数值、文本和布尔值比较;布尔型数据逻辑操作;连接字符串和 blob型数据。
一、PowerScript 支持四种类型操作符:
• 关系操作符:= 等于、> 大于、< 小于 、<> 不等于、>= 大于等于、<= 小于等于
• 逻辑操作符:NOT 逻辑非、AND 逻辑与、OR 逻辑或
• 用于字符串的连接操作符,例如:"字符串" +"字符串"
• 用于数值型数据的算术操作符:+ 加 、- 减、* 乘、/ 除、^ 乘方
二、操作符在表达式中的优先级
{ 最高 ( ) }, { 一元操作符+,− },{ ^ },{ *,/ },{ 加、减和连接操作符+,− },{ =,>,<,<=,>=,<> } ,{ NOT }.{ AND },{(最低) OR }
三、表达式的数据类型
在计算表达式时,如果存在多种类型,PowerBuilder 将把它们转换为表达式中存在的级别最高的数据类型。
表达式中数值数据类型转换的规则是:级别低的数据类型转换为级别高的数据类型;无符号的级别高于有符号的类型。例如:一表达式中有 long 型变量和 unsignedinteger 型变量,结果转换为 unsignedlong 型。
1(最高) double ;2 real ;3 decimal ;4 Unsignedlong,long ;5(最低) Unsignedinteger,intger
操作符使数据类型发生转换,其转换作用如下:
• 操作符+、−、*的最低精度为 long 型,在进行这三种操作时,如果有低于 long 的数据类型级别的数据类型将至少转换为 long 型,表达式返回结果的精度至少为 long ;
• 操作符/和^的最低精度为 double 型,所有数据都转化为 double 后计算,结果的精度为 double;
• 在 long 可接受范围内的整数 long ,超出 long 可接受范围的整数 Unsignedlong ,超出 unsignedlong 范围 (编译错误),带有小数点(非指数形式) decimal ,带有小数点(具有指数形式) double;
四、赋值与表达式
在赋值语句中,表达式的结果被转化为等号左侧变量的类型后,再赋给它。由于在赋值过程中存在类型转换,在高级数值类型转换为低级数值类型时,有可能发生溢出。
下面一段程序说明赋值语句的赋值过程:
integer a = 32000, b = 1000;long d ;d = a + b ;
最后结果 d = 33 000,赋值过程为:
a. 转换 a 为 long 型。b. 转换 b 为 long 型。c.进行相加 a + b = 33000。d. 把结果赋给变量 d,d = 33000。
下面一段程序的赋值过程将会溢出:
integer a = 32000, b = 1000, c ;long d ;c = a + b ;d = c ;
赋值过程为:
a. 转换 a 为 long 型。b. 转换 b 为 long 型。c. 进行相加 a + b = 33000。d. 把结果转换为 integer,赋给变量 c,c = -32536,溢出。e. 把变量 c 转换为 long,赋给变量 d,d = -32536,无法挽救溢出的结果。
string 型数据赋值给 char 型时,char 型数据得到字符串中的第一个字符。char 型数据赋给 string 型时,字符串成为仅有一个字符的字符串。
string 型数据可以赋给 char 型数组,遵守如下规则:
• 动态 char 型数组可以直接赋值
• 定长数组,如字符串超长,多余部分截去
• 数组长度大于字符串长度,复制整个字符串给数组,包括零字符串终止符(zero terminator)
char 型数组也可赋值给 string 型数据,数组中的内容被复制到 string 型数据中,如果在 char 型数组中存在字符串终止符,复制仅进行到终止符。基于上述规则,所有接受 string 的函数都接受 char 型数据和 char 型数组。