Object Pascal 的运算符

运算符是程序代码中对各种类型的数据进行计算的符号,通常分为算数运算符、逻辑运算符、比较运算符和按位运算符。

1.算术运算符
Object Pascal 语言的算术运算符,如表1-9 所示。
表1-9 Object Pascal 语言算术运算符

操作符 操作 操作数据类型 结果类型
+ 整型、实型 整型、实型
- 整型、实型 整型、实型
* 整型、实型 整型、实型
/ 整型、实型 整型、实型
mod 取余 整型 整型
div 整除 整型 整型

2.逻辑运算符
逻辑运算符操作对象和返回值都为布尔型,如表1-10 所示。
表1-10 Object Pascal 语言逻辑运算符

操作符 操作 操作数据类型
not 布尔
and 布尔
or 布尔
xor 异或 布尔

3.比较运算符
比较运算符返回值为布尔型(True 或False),关系运算符如表1-11 所示。
表1-11 Object Pascal 语言关系运算符

操作符 操作 操作数据类型
= 等于 简单数据类型、指针、集合、字符串或字符串包
<> 不等于 简单数据类型、指针、集合、字符串或字符串包
< 小于 简单数据类型、指针、集合、字符串或PChar
> 大于 简单数据类型、指针、集合、字符串或PChar
<= 小于等于 简单数据类型、指针、集合、字符串或PChar
>= 大于等于 简单数据类型、指针、集合、字符串或PChar
<= 子集 集合
>= 父集 集合

4.按位运算符
通过按位运算符可以修改一个变量的单独的位。可以进行按位与、或、非、异或,也可以对一个数进行向左(Shl)或向右(Shr)移位操作。Delphi 的按位运算符共有六个: not and or xor shr shl; 其中的 not and or xor 也叫逻辑运算符, 其实功能都是一样的, 因为不管什么数据追到底都是 0 和 1 的组合;在 Delphi 内嵌汇编中, 应该也没什么区别。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls; type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
end; var
Form1: TForm1; implementation {$R *.dfm} const
w1: Word = ; {二进制表示: 11110000 11110000}
w2: Word = ; {二进制表示: 00001111 00001111}
var
w: Word; {not 运算, 只有一个运算数}
procedure TForm1.Button1Click(Sender: TObject);
begin
w := not w1; {not 就是按位(给二进制的每一位)取反}
{11110000 11110000 取反后就是:}
{00001111 00001111 }
ShowMessage(IntToStr(w)); {}
end; {and 运算, 需要两个运算数}
procedure TForm1.Button2Click(Sender: TObject);
begin
w := w1 and w2; {and 就是把两个运算数按位对比, 如果相同(都是1或都是0)返回1; 不同返回0}
{w1: 11110000 11110000 与}
{w2: 00001111 00001111 每一位都不同, 所以返回:}
{w : 00000000 00000000}
ShowMessage(IntToStr(w)); {}
end; {or 运算, 需要两个运算数}
procedure TForm1.Button3Click(Sender: TObject);
begin
w := w1 or w2; {or 就是把两个运算数按位对比, 只有其中一个是1就返回1; 都是0才返回0}
{w1: 11110000 11110000 与}
{w2: 00001111 00001111 or 后会返回:}
{w : 11111111 11111111}
ShowMessage(IntToStr(w)); {}
end; {xor 运算, 需要两个运算数}
procedure TForm1.Button4Click(Sender: TObject);
begin
w := w1 or w2; {and 就是把两个运算数按位对比, 只有两个不一样才返回1; 一样(都是0或都是1)则返回0}
{w1: 11110000 11110000 与}
{w2: 00001111 00001111 xor 后会返回:}
{w : 11111111 11111111}
ShowMessage(IntToStr(w)); {65535; 两个例数不太好, 没给 xor 和 or 区别明显}
end; {shr 运算, 只有一个运算数}
procedure TForm1.Button5Click(Sender: TObject);
begin
w := w1 shr ; {shr 是按位右移, shr 1 是右移一位}
{w1: 11110000 11110000 右移一位后是:}
{w : *1111000 01111000 前面的*就是0了}
ShowMessage(IntToStr(w)); {} {同理, 可以移动几位, 譬如 3 位}
w := w1 shr ;
ShowMessage(IntToStr(w)); {} {w1 shr 3 相当与 w1 div 2的3次方}
w := w1 div ;
ShowMessage(IntToStr(w)); {}
end; {shl 运算, 只有一个运算数}
procedure TForm1.Button6Click(Sender: TObject);
var
i: Integer;
begin
w := w1 shl ; {shr 是按位左移}
{w1: 11110000 11110000 左移一位后是:}
{w : 1110000 111100000 }
ShowMessage(IntToStr(w)); {} {左移 3 位}
w := w1 shl ;
ShowMessage(IntToStr(w)); {} {w1 shl 3 相当与 w1 * 2的3次方}
w := w1 * ;
ShowMessage(IntToStr(w)); {} {注意这里有个问题: w1*8 以后怎么小了呢?}
{因为前面已经定义了 w 是 Word 类型的, 它的大小只有2个字节(二进制16位), 超出会忽略} {如果换成32位(4字节)的 Integer 类型, 肯定就会有真实的结果:} i := w1 shl ;
ShowMessage(IntToStr(i)); {} i := w1 * ;
ShowMessage(IntToStr(i)); {}
end; end.

5.运算符优先级
一个表达式中可能有多个运算符,它们的运算是有先后顺序的,不同的运算符在表达式中的优先级如表1-12 所示。
表1-12 运算符的优先级

级别

运算符

第一级(最高级) .  ^
第二级 @  not

第三级

* / div mod and as shl shr
第四级

+ - or xor

第五级(最低级) = <> < > <= >= in is

 
 

Delphi 的特殊符号

 
@:取址运算符
var
int:integer;
p:^integer;
begin
new(P);
int:=;
p:=@int;
dispose(P);
end;
 
^:指针的引用解析操作符
符号 ^ 有两种用途,当它出现在类型标识符之前,如^typeName,表示一个类型,该类型表示指向typeName类型变量的指针;当它出现在指针变量之后,如pointer^,该符号对指针解除参照,也就是说,返回存储在内存地址(该地址保存在指针中)的值指针,指向的数据.
var
I: Integer;
PI: ^Integer;
begin
I :=
PI := @I;;
PI^ := ;
I := PI^;
end;

取指针的方法,比如y:=p^; 就是指为Y赋值指针P

 
#:ASCII码值表示符;
const
  tab_key=#9;//TAB键的ASCII值
 
 
 
$: 十六进制符 

var
pint:^integer;
begin
new(pint);
showmessage(inttohex(integer(@pint),8));
pint^:=$ff;
showmessage(inttohex(pint^,4));
end;

Object Pascal 运算符的更多相关文章

  1. Object Pascal 数据类型

     数据类型与定义变量 Object Pascal 语言的最大特点是对数据类型的要求非常严谨.传递给过程或函数的参数值必须与形参的类型一致.在Object Pascal 语言中不会看到像C 语言编译器提 ...

  2. Object Pascal 面向对象的特性

    2 面向对象的特性 在软件系统开发过程中,结构分析技术和结构设计技术具有很多优点,但同时也存在着许多难以克服的缺点.因为结构分析技术和结构设计技术是围绕着实现处理功能来构造系统的,而在系统维护和软件升 ...

  3. 终于懂了:Delphi的函数名不是地址,取地址必须遵守Object Pascal的语法(Delphi和C的类比:指针、字符串、函数指针、内存分配等)good

    这点是与C语言不一样的地方,以前我一直都没有明白这一点,所以总是不明白:函数地址再取地址算怎么回事? ------------------------------------------------- ...

  4. Object Pascal中文手册 经典教程

    Object Pascal 参考手册 (Ver 0.1)ezdelphi@hotmail.com OverviewOverview(概述)Using object pascal(使用 object p ...

  5. Object Pascal 过程与函数

    过程与函数 过程与函数是实现一定功能的语句块,是程序中的特定功能单元.可以在程序的其他地方被调用,也可以进行递归调用.过程与函数的区别在于过程没有返回值,而函数有返回值. 1.过程与函数的定义 过程与 ...

  6. Object Pascal 语言基础

    Delphi 是以Object Pascal 语言为基础的可视化开发工具,所以要学好Delphi,首先要掌握的就是Object Pascal 语言.Object Pascal语言是Pascal之父在1 ...

  7. Object Pascal 语法之异常处理

    http://www.cnblogs.com/spider518/archive/2010/12/30/1921298.html 3 结构化异常处理 结构化异常处理(SHE)是一种处理错误的手段,使得 ...

  8. Object Pascal对象模型中构造函数之研究

    http://www.delphi2007.net/delphiblog/html/delphi_2004511950333715.html 前言 近期,一直在使用 C++ 与 Object Pasc ...

  9. Delphi APP 開發入門(六)Object Pascal 語法初探

    Delphi APP 開發入門(六)Object Pascal 語法初探 分享: Share on facebookShare on twitterShare on google_plusone_sh ...

随机推荐

  1. rtc关机闹钟4 AlarmManagerService.java

    vim base/services/core/java/com/android/server/AlarmManagerService.java AlarmManager 调用 IAlarmManage ...

  2. LA 4998 Simple Encryption

    题意:输入正整数$K_1(K_1 \leq 50000)$, 找一个$12$位正整数$K_2$(不能含有前导零)使得${K_1}^{K_2}\equiv K_2(mod10^{12})$. 例如,$K ...

  3. hrtimer和work工作队列的使用

    1.hrtimers - 为高分辨率kernel定时器,可作为超时或周期性定时器使用 1). hrtimer_init初始化定时器工作模式. hrtimer_init(&vibe_timer, ...

  4. Linux sync命令的作用

    adb shell sync 写缓存命令——sync 在用reboot命令启动unix系统后,系统提示出错信息,部分应用程序不能正常工作.经仔细检查系统文件,并和初始的正确备份进行比较,发现某些文件确 ...

  5. JS实现base64编码与解码

    var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ...

  6. 快速编译system.img、userdata.img、boot.img的方法

    快速编译system.img和boot.img的方法 快速编译system.img,可以使用这个命令: #make systemimage 快速编译boot.img,可以使用以下命令: #make b ...

  7. UIView如何管理它的子视图

    UIView提供了很多建立和管理视图的方法. 1.添加视图 insertSubview:atIndex:   //放在子视图数组的具体索引位置 insertSubview:aboveSubview:  ...

  8. SqlSever基础 union 与 union all的区别,即 重复项是否全部显示

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  9. merge into的用法

    merge into 是英文的一个短语,意思是汇入,合并.顾名思义,merge into是合并了insert和update操作,其执行效率要高于分别单独执行insert和update语句. //创建表 ...

  10. 关于socket tcp 断线重连

    这个问题困扰过我几次,都没有来得及研究,今天研究一下. 首先写一个最简易的socket tcp程序,连接成功后再关闭服务器然后再用客户端各种操作看是什么情况 测试表明 (1)客户端已经连接,当服务端关 ...