Delphi学习笔记三——运算符

来源:互联网 发布:java怎么解析excel 编辑:程序博客网 时间:2024/05/01 09:59

今天我们来看一下Delphi的运算符:

Delphi的运算符分为:@, not, and ^的一元运算符;*, /, div, mod, and, shl, shr, as, +, -, or, xor, =, >, <, <>, <=, >=, in, and is为二元运算符

一、赋值运算符

对于Pascal的新手来说,Delphi的赋值运算符和其它常用编程语言的赋值运算符不大一样,需要用:=来表示。例如:

Number := 5;

 

二、比较运算符

对于Object Pascal来说,用=运算符来对两个表达式或两个值进行逻辑比较运算;用<>表示不等于运算符,这和其它语言用==、!=来表示有比较大的区别,新手比较容易搞错。

 

三、逻辑表达式

Pascal用and和or作为逻辑与和逻辑或的运算符,用not作为逻辑非的运算符。例如:

if A and B then   //逻辑与while A or B do  //逻辑或if not A then      //逻辑非A xor B              //逻辑异或A shl B              //A的二进制向左移动B位,尾数补零A shr B              //A的二进制向右移动B位,首部补1

四、算术运算符

这里需要注意的是,在Pascal中,特意定义了针对整数除的运算符——div。在两个整数向楚时,自动截取余数取整;mod取余。主要使用在对整数操作中。x mod y = x - (x div y) * y;一个运行时错误是发生在当y为0时,对X/Y、X div Y、X mod Y的操作中。

五、位运算

在Pascal中的左移和右移是以shl和shr来表示的。

六、加减运算符

在Pascal中,提供了Inc()和Dec()来执行其它语言中++和--的操作。例如

Inc(variable);  //variable ++Dec(variable); //variable --Inc(variable,3);  //variable+3Dec(variable,3); //variable-3


七、指针运算符

其中,关系运算符中的<, >, <=, and >=可以用来操作“PChar”、“PWideChar”类型。

+:将指针指向的地址增加偏移量;

-:将指针指向的地址减去偏移量;

^:1.取指针所指向地址中的内容(位于指针后);2.定义基类型的指针(位于基类型前面)

=:判断两个指针是否指向同一地址;

<>:判断两个指针是否指向不同地址;

如果P=Q为true,则表示P、Q指向同一个地址;+,-操作符用来增加或减少一个字符指针的偏移量。

 

八、集合运算符

+:集合并;

-:集合差;

*:集合交;

<=:左边集合是否包含于右边集合;

>=:左边集合是否包含右边集合;

=:左边集合是否等于右边集合;

<>:左边集合是否不等于右边集合;

In:左边集合是否与右边集合有从属关系;

例如:O in X+Y 相当于O在X或者Y中;O in X-Y相当于O只在X并不在Y中;O in X *Y相当于包含在X和Y中;X<=Y为真表示X的所有元素都包含在Y 内;O in S表示O是S的一个元素;

 

九、@运算符

@运算符返回一个变量、过程、方法或函数的地址。在用于方法时,必须用@TMyClass.DoSomething。

十、布尔运算符

布尔运算符有以下四个:not(非)、and(与)、or(或)、xor(异或)。

 

十一、字符串运算符

关系运算符中的“=”、“<>”、“<”、“>”、“<=”、“>=”都可以进行字符串操作,“+”用来进行字符串的连接。

十二、关系型运算符

关系型运算符用于比较两个操作数。其中=, <>, <=, and >=可以用于集合;= and <> 也可以用于指针;

I=J为true表示I和J的值相同;需要注意的是,1.这里的两个操作数必须是兼容的 并且可以相比;2.使用<>, <=, and >=来比较PChar和PWideChar时,其指针指向的数组内存地址必须相同。

 

十三、类运算符

类运算符包括as 和 is。

 

十四、运算符的规则

运算符以以下顺序执行:

@, notfirst (highest)*, /, div, mod, and, shl, shr, assecond+, -, or, xorthird=, <>, <, >, <=, >=, in, isfourth (lowest)


 十五、变量类型转换

type Func = function(X: Integer): Integer;var    F: Func;    P: Pointer;    N: Integer;

你可以进行以下操作

F := Func(P);           { Assign procedural value in P to F }Func(P) := F;           { Assign procedural value in F to P }@F := P;                { Assign pointer value in P to F }P := @F;                { Assign pointer value in F to P }N := F(N);              { Call function via F }N := Func(P)(N);        { Call function via P }


 

原创粉丝点击