通常,用 Flags and Mask = Mask 来判断,例如:
//Flag是一个16位整数,现在要判断最高位是否为1,则Mask为$8000
if Flags and $8000 <> 0 then
...
另外,我介绍一种本人常采用的集合判断法(推荐):
var
Flags:set of [0..15];
begin
Word(Flags):=??
//GetFlag
//要判断第 n (n=0..15)位是否为1:
if n in Flags then
...
end;
使用集合,你需要理解的是:集合中的每一个元素占据一个二进制位。
采用这种方法,你可以让程序更具可读性,如你可以根据Flag各位的含义对每一个位进行
命名,以后你就不必关心哪个标志是在那一位了——用名字判断即可。如:
type
TFlagNames=(Name0,Name1,Name2,...,SomeFlag,...,UnUsedBit,...Name15)
//NameX随意命名
var
Flags:set of [TFlagNames];
begin
Word(Flags):=??
//GetFlag
if SomeFlag in Flags then
...
end;
如果你不是直接判断某一位是否被置位,而是要判断哪一位或哪几位被置位,那你得用循环:
var
Flag:TFlagNames;
begin
...
for Flag:=Name0 to Name15 do
if Flag in Flags then
DoSomeThing;
...
end;