• Object Pascal 运算符


     
     
     
    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 = 61680; {二进制表示: 11110000 11110000}
    w2: Word = 3855; {二进制表示: 00001111 00001111}
    var
    w: Word;
    
    {not 运算, 只有一个运算数}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    w := not w1;
    
    {not 就是按位(给二进制的每一位)取反}
    {11110000 11110000 取反后就是:}
    {00001111 00001111 }
    ShowMessage(IntToStr(w)); {3855}
    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)); {0}
    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)); {65535}
    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 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 相当与 w1 div 2的3次方}
    w := w1 div 8;
    ShowMessage(IntToStr(w)); {7710}
    end;
    
    {shl 运算, 只有一个运算数}
    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 相当与 w1 * 2的3次方}
    w := w1 * 8;
    ShowMessage(IntToStr(w)); {34688}
    
    {注意这里有个问题: w1*8 以后怎么小了呢?}
    {因为前面已经定义了 w 是 Word 类型的, 它的大小只有2个字节(二进制16位), 超出会忽略}
    
    {如果换成32位(4字节)的 Integer 类型, 肯定就会有真实的结果:}
    
    i := w1 shl 3;
    ShowMessage(IntToStr(i)); {493440}
    
    i := w1 * 8;
    ShowMessage(IntToStr(i)); {493440}
    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:=24;
      p:=@int;
      dispose(P);
    end;
     
    ^:指针的引用解析操作符
    符号 ^ 有两种用途,当它出现在类型标识符之前,如^typeName,表示一个类型,该类型表示指向typeName类型变量的指针;当它出现在指针变量之后,如pointer^,该符号对指针解除参照,也就是说,返回存储在内存地址(该地址保存在指针中)的值指针,指向的数据.
    var
      I: Integer;
      PI: ^Integer; 
    begin
      I := 10
      PI := @I;;
      PI^ := 20;
      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;
  • 相关阅读:
    计算机网络中的多路复用技术
    ActiveMQ之一--ActiveMQ入门
    ehcache介绍
    I/O模型之二:Linux IO模式及 select、poll、epoll详解
    【甘道夫】HBase(0.96以上版本号)过滤器Filter具体解释及实例代码
    Android Studio安装及主题字体配置
    HDU 2136 Largest prime factor 參考代码
    update更新两个字段
    Hadoop对小文件的解决方式
    赵雅智_ContentProvider
  • 原文地址:https://www.cnblogs.com/ivantang/p/3833657.html
Copyright © 2020-2023  润新知