我想判断电脑里有多少个驱动器,找到了GetLogicalDrives函数。下面是万一老师博客里面的一段代码procedure TForm1.FormCreate(Sender: TObject);
var
Drives: DWord;
i: Integer;
begin
Drives := GetLogicalDrives; Memo1.Clear;
for i := 0 to 25 do {最多 26 个字母都用上}
if LongBool(Drives and ($0001 shl i)) = True then
Memo1.Lines.Add(Char(Ord('A')+i) + ':\');
end;但是我看不懂,特别是if LongBool(Drives and ($0001 shl i)) = True then是什么意思???另外我想判断GetLogicalDrives返回值的每个位具体为1 还是0,该怎么判断呢?如果是使用shr来操作,那么怎么才能判断最后一位是1 还是0?谢谢!
var
Drives: DWord;
i: Integer;
begin
Drives := GetLogicalDrives; Memo1.Clear;
for i := 0 to 25 do {最多 26 个字母都用上}
if LongBool(Drives and ($0001 shl i)) = True then
Memo1.Lines.Add(Char(Ord('A')+i) + ':\');
end;但是我看不懂,特别是if LongBool(Drives and ($0001 shl i)) = True then是什么意思???另外我想判断GetLogicalDrives返回值的每个位具体为1 还是0,该怎么判断呢?如果是使用shr来操作,那么怎么才能判断最后一位是1 还是0?谢谢!
解决方案 »
- TMemTableEh 控件 CopyStructure的方法错误
- 关于LineDDA的问题。。
- 你们那谁有十六进制转成字符串的函数?
- ######任意钱数转换大写,开来帮忙啊!!¥¥¥¥¥¥
- 怎样使用 out 指令,紧紧紧紧!!!
- 简单问题...... up有分!!!!!!!!!!!
- 100分~我想实现这个功能,怎么实现-在panel里打开一个form
- 急!请问如何建立读取修改ini文件?
- ClientSocket通讯,IP可PING通,但SOCKET连不上,阻塞或非阻塞均告错,详见内......
- 如何将listbox显示一个表里的所有字段?我的别名是111,表名是book.
- 如何表示当前程序目录
- getdrivetype求助
返回值:返回值的二进制右边第一位为 1 表示驱动器 A: 存在;返回值的二进制右边第二位为 1 表示驱动器 B: 存在...以次类推
true and true=true (1 and 1=1)
true and false=false(1 and 0=1)
如果($0001 shl i)在i=1时的值为:0000 0000 0000 0001 0000
不管怎么说,(drives and ($0001 shl i))总是为真啊,因为两个比较项都是大于1;
糊涂了
这里的 and 是按位与运算, and 运行后得到的值就剩下指定的位了。再转换成LongBool, 也就是非零就转换成True, 零就转换成了False.
因此该条件语句,就是判断了Drives的第i位是否为零