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;
其实我不太清楚or和shl哪个优先级高,但是可以判断下,shl是向左移位。
- 如果
or优先级高,那么A和B先进行或运算,那么这就不是高八位与低八位的拼接了,因为或运算破坏了A和B的值。 - 如果
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;
好的代码像粥一样,都是用时间熬出来的
浙公网安备 33010602011771号