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;

posted on 2022-04-30 17:59  癫狂编程  阅读(1412)  评论(0编辑  收藏  举报

导航

好的代码像粥一样,都是用时间熬出来的