• Delphi 7:数据类型 Byte 和 Word


    Byte 和 Word 这两个数据类型,都是无符号整数,详情如下:

    数据类型字节位数取值范围
    Byte 1 8 0 ~ 255
    Word 2 16 0 ~ 65535

    之所以会用到这两个数据类型,是因为公司有个项目,需要读写寄存器中的数据,该寄存器两个字节,分为高八位和低八位。

    获取数据时,调用了硬件厂家的API函数,它使用C语言编写。
    获取寄存器数据时,它定义了一个Byte数组Byte value[2]来分别获取高八位和低八位的数据,最后使用MakeWord函数拼接在一起。

    正好,Delphi 7中也有这个函数,我们来看看具体内容

    function MakeWord(A, B: Byte): Word;
    begin
      Result := A or B shl 8;
    end;

    其实我不太清楚orshl哪个优先级高,但是可以判断下,shl是向左移位。

    • 如果or优先级高,那么AB先进行或运算,那么这就不是高八位与低八位的拼接了,因为或运算破坏了AB的值。
    • 如果shl优先级高,那么B先向左移八位,尾部补八个零,再进行或运算,相当于A全部成了B的低八位,这样结果就是一个Word,完美,不过还得实际运行下。
    var
      bh, bl: Byte;
      w: Word;
    begin
      bh:= 1;                  {00000001,1}
      bl:= 2;                  {00000010,2}
      w:= MakeWord(bl, bh);    {1 0000 0010,258}
    end;

    事实证明以上猜想正确,其正确用法为MakeWord(低八位, 高八位)

    ※备注一:运算符or的用法

    {******************
      and:按位与
      or :按位或
     ******************}
    var
      i, j, m, n: Integer;
    begin
      i:= 1;        {01,1}
      j:= 2;        {10,2}
      m:= i and j;  {00,0}
      n:= i or j;   {11,3}
    end;

    ※备注二:运算符shl的用法

    {******************
      shr:二进制数向右移位,首部补零,相当于乘以 2的 n次方
      shl:二进制数向左移位,尾部补零,相当于除以 2的 n次方
     ******************}
    var
      x, y, z1, z2, n: Integer;
    begin
      n:= 1;
    
      x:= 1;         {01,1}
      y:= 2;         {10,2}
      x:= x shl n;   {10,2}
      y:= y shr n;   {01,1}
    
      z1:= 12;         {01100,12}
      z2:= 12;
      z1:= z1 shl n;   {11000,24}
      z2:= z2 shr n;   {00110,6}
    end;
  • 相关阅读:
    CS231n笔记 Lecture 4 Introduction to Neural Networks
    CS231n笔记 Lecture 3 Loss Functions and Optimization
    CS231n笔记 Lecture 1 Introduction
    LeetCode
    Python备忘录
    Celery简介
    SaltStack error: No module named 'salt'
    IO模型
    TCP协议的三次握手和四次分手
    第一章:正则表达式
  • 原文地址:https://www.cnblogs.com/jijm123/p/16210844.html
Copyright © 2020-2023  润新知