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. [转]关于 initWithNibName 和 loadNibNamed 的区别和联系-iPhone成长之路

    转载地址:http://blog.sina.com.cn/s/blog_7b9d64af01018f2u.html 关于 initWithNibName 和 loadNibNamed 的区别和联系.之 ...

  2. awk用法小结(作者总结)

    http://www.chinaunix.net/old_jh/24/691456.html http://wenku.baidu.com/view/ebac4fc658f5f61fb736664d. ...

  3. Unix下五种IO模型

    http://blog.chinaunix.net/uid-25324849-id-247813.html 1. I/O模型 Unix下共有五种I/O模型 a. 阻塞I/O b. 非阻塞I/O c. ...

  4. Poj(2367),拓扑排序

    题目链接:http://poj.org/problem?id=2367 题意: 知道一个数n, 然后n行,编号1到n, 每行输入几个数,该行的编号排在这几个数前面,输出一种符合要求的编号名次排序. 拓 ...

  5. 利用Velocity结合Spring发email

    在spring中发mail是一件容易的事,如果利用Velocity做mail的模板来发送就更得心应手了. 首先,还是简单描述sping中的配置,发mail需要一个mail的engin: <bea ...

  6. HDU 4630 No Pain No Game 线段树 和 hdu3333有共同点

    No Pain No Game Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  7. c++中两种常量方法的比较

    [c++]在C++中定义常量的两种方法的比较   常量是定以后,在程序运行中不能被改变的标识符.C++中定义常量可以用#define .const 这两种方法.例如: #define PRICE 10 ...

  8. PHP脚本redis类的实例源码

    class redisDB{         private $redis; //redis对象             /**      * 初始化Redis      * $config = ar ...

  9. [cdoj1380] Xiper的奇妙历险(3) (八数码问题 bfs + 预处理)

    快要NOIP 2016 了,现在已经停课集训了.计划用10天来复习以前学习过的所有内容.首先就是搜索. 八数码是一道很经典的搜索题,普通的bfs就可求出.为了优化效率,我曾经用过康托展开来优化空间,甚 ...

  10. 01scala环境搭建和基础

    1.环境搭建 1.下载安装jdk1.7以上版本,并进行环境变量的配置 2.下载scala-2.10.4.msi,安装后进行环境变量的配置 3.下载scala-SDK-4.1.1-vfinal-2.11 ...