电竞比分网-中国电竞赛事及体育赛事平台

分享

Object Pascal 運算符

 佚名2016 2016-07-27
Object Pascal 的運算符

運算符是程序代碼中對各種類型的數(shù)據(jù)進(jìn)行計算的符號,通常分為算數(shù)運算符、邏輯運算符、比較運算符和按位運算符。

1.算術(shù)運算符
Object Pascal 語言的算術(shù)運算符,如表1-9 所示。
表1-9 Object Pascal 語言算術(shù)運算符

操作符 操作 操作數(shù)據(jù)類型 結(jié)果類型
+ 整型、實型 整型、實型
- 整型、實型 整型、實型
* 整型、實型 整型、實型
/ 整型、實型 整型、實型
mod 取余 整型 整型
div 整除 整型 整型


2.邏輯運算符
邏輯運算符操作對象和返回值都為布爾型,如表1-10 所示。
表1-10 Object Pascal 語言邏輯運算符

操作符 操作 操作數(shù)據(jù)類型
not 布爾
and 布爾
or 布爾
xor 異或 布爾


  
3.比較運算符
比較運算符返回值為布爾型(True 或False),關(guān)系運算符如表1-11 所示。
表1-11 Object Pascal 語言關(guān)系運算符

操作符 操作 操作數(shù)據(jù)類型
= 等于 簡單數(shù)據(jù)類型、指針、集合、字符串或字符串包
<> 不等于 簡單數(shù)據(jù)類型、指針、集合、字符串或字符串包
< 小于 簡單數(shù)據(jù)類型、指針、集合、字符串或PChar
> 大于 簡單數(shù)據(jù)類型、指針、集合、字符串或PChar
<= 小于等于 簡單數(shù)據(jù)類型、指針、集合、字符串或PChar
>= 大于等于 簡單數(shù)據(jù)類型、指針、集合、字符串或PChar
<= 子集 集合
>= 父集 集合


4.按位運算符
通過按位運算符可以修改一個變量的單獨的位。可以進(jìn)行按位與、或、非、異或,也可以對一個數(shù)進(jìn)行向左(Shl)或向右(Shr)移位操作。Delphi 的按位運算符共有六個: not and or xor shr shl; 其中的 not and or xor 也叫邏輯運算符, 其實功能都是一樣的, 因為不管什么數(shù)據(jù)追到底都是 0 和 1 的組合;在 Delphi 內(nèi)嵌匯編中, 應(yīng)該也沒什么區(qū)別。

復(fù)制代碼
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 = 61680; {二進(jìn)制表示: 11110000 11110000}
w2: Word = 3855; {二進(jìn)制表示: 00001111 00001111}
var
w: Word;

{not 運算, 只有一個運算數(shù)}
procedure TForm1.Button1Click(Sender: TObject);
begin
w := not w1;

{not 就是按位(給二進(jìn)制的每一位)取反}
{11110000 11110000 取反后就是:}
{00001111 00001111 }
ShowMessage(IntToStr(w)); {3855}
end;

{and 運算, 需要兩個運算數(shù)}
procedure TForm1.Button2Click(Sender: TObject);
begin
w := w1 and w2;

{and 就是把兩個運算數(shù)按位對比, 如果相同(都是1或都是0)返回1; 不同返回0}
{w1: 11110000 11110000 與}
{w2: 00001111 00001111 每一位都不同, 所以返回:}
{w : 00000000 00000000}
ShowMessage(IntToStr(w)); {0}
end;

{or 運算, 需要兩個運算數(shù)}
procedure TForm1.Button3Click(Sender: TObject);
begin
w := w1 or w2;

{or 就是把兩個運算數(shù)按位對比, 只有其中一個是1就返回1; 都是0才返回0}
{w1: 11110000 11110000 與}
{w2: 00001111 00001111 or 后會返回:}
{w : 11111111 11111111}
ShowMessage(IntToStr(w)); {65535}
end;

{xor 運算, 需要兩個運算數(shù)}
procedure TForm1.Button4Click(Sender: TObject);
begin
w := w1 or w2;

{and 就是把兩個運算數(shù)按位對比, 只有兩個不一樣才返回1; 一樣(都是0或都是1)則返回0}
{w1: 11110000 11110000 與}
{w2: 00001111 00001111 xor 后會返回:}
{w : 11111111 11111111}
ShowMessage(IntToStr(w)); {65535; 兩個例數(shù)不太好, 沒給 xor 和 or 區(qū)別明顯}
end;

{shr 運算, 只有一個運算數(shù)}
procedure TForm1.Button5Click(Sender: TObject);
begin
w := w1 shr 1;

{shr 是按位右移, shr 1 是右移一位}
{w1: 11110000 11110000 右移一位后是:}
{w : *1111000 01111000 前面的*就是0了}
ShowMessage(IntToStr(w)); {30840}

{同理, 可以移動幾位, 譬如 3 位}
w := w1 shr 3;
ShowMessage(IntToStr(w)); {7710}

{w1 shr 3 相當(dāng)與 w1 div 2的3次方}
w := w1 div 8;
ShowMessage(IntToStr(w)); {7710}
end;

{shl 運算, 只有一個運算數(shù)}
procedure TForm1.Button6Click(Sender: TObject);
var
i: Integer;
begin
w := w1 shl 1;

{shr 是按位左移}
{w1: 11110000 11110000 左移一位后是:}
{w : 1110000 111100000 }
ShowMessage(IntToStr(w)); {57824}

{左移 3 位}
w := w1 shl 3;
ShowMessage(IntToStr(w)); {34688}

{w1 shl 3 相當(dāng)與 w1 * 2的3次方}
w := w1 * 8;
ShowMessage(IntToStr(w)); {34688}

{注意這里有個問題: w1*8 以后怎么小了呢?}
{因為前面已經(jīng)定義了 w 是 Word 類型的, 它的大小只有2個字節(jié)(二進(jìn)制16位), 超出會忽略}

{如果換成32位(4字節(jié))的 Integer 類型, 肯定就會有真實的結(jié)果:}

i := w1 shl 3;
ShowMessage(IntToStr(i)); {493440}

i := w1 * 8;
ShowMessage(IntToStr(i)); {493440}
end;

end.
復(fù)制代碼

 


5.運算符優(yōu)先級
一個表達(dá)式中可能有多個運算符,它們的運算是有先后順序的,不同的運算符在表達(dá)式中的優(yōu)先級如表1-12 所示。
表1-12 運算符的優(yōu)先級


級別 運算符
第一級(最高級) .  ^
第二級 @  not
第三級 * / div mod and as shl shr
第四級

+ - or xor

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

Delphi 的特殊符號

@:取址運算符
復(fù)制代碼
var
  int:integer;
  p:^integer;
begin
  new(P);
  int:=24;
  p:=@int;
  dispose(P);
end;
復(fù)制代碼

 

^:指針的引用解析操作符
符號 ^ 有兩種用途,當(dāng)它出現(xiàn)在類型標(biāo)識符之前,如^typeName,表示一個類型,該類型表示指向typeName類型變量的指針;當(dāng)它出現(xiàn)在指針變量之后,如pointer^,該符號對指針解除參照,也就是說,返回存儲在內(nèi)存地址(該地址保存在指針中)的值指針,指向的數(shù)據(jù).
復(fù)制代碼
var
  I: Integer;
  PI: ^Integer; 
begin
  I := 10
  PI := @I;;
  PI^ := 20;
  I := PI^;
end;
復(fù)制代碼

取指針的方法,比如y:=p^; 就是指為Y賦值指針P

#:ASCII碼值表示符;
const
  tab_key=#9;//TAB鍵的ASCII值
$: 十六進(jìn)制符 

復(fù)制代碼
var
  pint:^integer;
begin
  new(pint);
  showmessage(inttohex(integer(@pint),8));
  pint^:=$ff;
  showmessage(inttohex(pint^,4));
end;
復(fù)制代碼

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多