对一个Byte的8个Bit位进行操作1. 对应8个位(bit)的数据:
00000000 , 00H, 0
00000001 , 01H, 1 //第0位为1 如果取低1位的值 就 and $1(1)
00000010 , 02H, 2 //第1位为1 如果取低2位的值 就 and $3(3) $3 = 3
00000100 , 04H, 4 //第2位为1 如果取低3位的值 就 and $7(7) $7 = 7
00001000 , 08H, 8 //第3位为1 如果取低4位的值 就 and $0F(15) $0F = 15
00010000 , 10H, 16 //第4位为1 如果取低5位的值 就 and $1F (31) $1F = 31
00100000 , 20H, 32 //第5位为1 如果取低6位的值 就 and $3F(63) $3F = 63
01000000 , 40H, 64 //第6位为1 如果取低7位的值 就 and $7F(127) $7F = 127
10000000 , 80H, 128 //第7位为1 如果取低8位的值 就 and $FF(255) $FF = 255
var
I: Byte;
begin
I := $01 or $04 or $10 or $40 or $80;
Memo1.Lines.add(Format('I = %s , %.2xH, %d ', [IntToBin(I), I, I]));
I := I and $F0;
Memo1.Lines.add(Format('保留高4位 I = %s , %.2xH, %d ', [IntToBin(I), I, I]));
I := $01 or $04 or $10 or $40 or $80;
I := I and $0F;
Memo1.Lines.add(Format('保留低4位 I = %s , %.2xH, %d ', [IntToBin(I), I, I]));
var I: Byte
I := $00;
2.把I的 0, 2, 4, 7位置1
I := $01 or $04 or $10 or $80;
I := '二进制 = 1001,0101';
3.把I的 0, 2, 4位清0
I := I and (not $01) and (not $04) and (not $10);
I := '二进制 = 1000,0000'
3.把I shl 1位
I := $01 or $04 or $10 or $80
I := '二进制 = 1001,0101'
I := I shl 1;
I := '二进制 0010,1010';
4.把I shr 2位
I := $01 or $04 or $10 or $80
I := '二进制 = 1001,0101'
I := I shr 2;
I := '二进制 = 00100101';
如何检查一个位的数据是否为1
第一位: I and $01 = $01;
最高位: I and $80 = $80;
0 and 0/1 = 0
1 and 0 = 0;
1 and 1 = 1;
5.一个Byte最高 High(Byte) = 255 也就是 0 ..255, 256个数据;
6.用两个Byte表示一个Word类型
I := HIByte(Word);
N := LOByte(Word);
//====还原
Word := Hibyte * 255 + Hibyte + Lobyte;
or
MakeWord(B{Lobyte}, I{Hibyte})
var
D: Word;
I, B: Byte;
begin
D := 43224;
I := Hibyte(D);
B := Lobyte(D);
Memo1.Lines.add(Format(' %d, %d ', [I, B]));
//====还原
D := I * 255 + I + B;
or D := MakeWord(B{Lobyte}, I{Hibyte})
Memo1.Lines.add(Format('%d', [D]));