Python GetLogicalDrives 按位与
Python GetLogicalDrives Bitwise AND
我对以下代码有一些疑问。
from win32 import win32file
drives = []
drivebits=win32file.GetLogicalDrives()
for d in range(1,26):
mask=1 << d
if drivebits & mask:
drname='%c:\' % chr(ord('A')+d)
t=win32file.GetDriveType(drname)
if t == win32file.DRIVE_REMOVABLE:
drives.append(drname)
print(drives)
1-当您使用 win32 模块中的 GetLogicalDrives 时,它 returns integer.Can 有人解释为什么?
2-为什么循环的范围在1到26之间?
3-按位与的原因是什么?
谢谢
win32
模块是 Win32 API 的一个非常低级的包装器,因此通常您可以查看函数名称的 Windows 文档并获取您需要的信息需要。您可以找到 documentation for GetLogicalDrives here.
回答你的问题:
整数对应可用驱动器:每个可用驱动器获得1位。因此,如果没有可用的驱动器,您将返回 0
,假设为 32 位整数)。如果每个驱动器都可用,您将得到 0b11111111111111111111111111
(二进制)
有26个字母,所以循环26个数字。 实际上,您发布的代码只是从 1 循环到 25,我认为这是一个错误。它应该只是 range(26)
.
按位与是检查returned整数的各个位。请记住,整数的每个位对应一个盘符。例如,假设您的 C、D 和 G 驱动器可用。您可以像这样想象 returned 值,其中第一行是 potential 驱动器,第二行是 returned二进制值:
ZYXWVUTSRQPONMLKJIHGFEDCBA # drive the bit corresponds to
00000000000000000001001100 # returned value, in binary, if C, D, and G are available
要检查驱动器A是否可用,需要检查最小位是否为1。检查各个位的方法是按位与。进行检查对于最小的位,你会做 drivebits & 1
,要检查驱动器 B,你需要检查第二位:drievebits & (1 << 1)
。要检查 C,您需要第三位:drivebits & (1 << 2)
。等等。
一些例子returns:
如果您只有 C 盘可用,GetLogicalDrives
将 return 0b100
(二进制)或 4
(十进制)。如果 C 和 D 可用,您将得到 0b1100
(二进制)或 12
(十进制)。
我对以下代码有一些疑问。
from win32 import win32file
drives = []
drivebits=win32file.GetLogicalDrives()
for d in range(1,26):
mask=1 << d
if drivebits & mask:
drname='%c:\' % chr(ord('A')+d)
t=win32file.GetDriveType(drname)
if t == win32file.DRIVE_REMOVABLE:
drives.append(drname)
print(drives)
1-当您使用 win32 模块中的 GetLogicalDrives 时,它 returns integer.Can 有人解释为什么?
2-为什么循环的范围在1到26之间?
3-按位与的原因是什么?
谢谢
win32
模块是 Win32 API 的一个非常低级的包装器,因此通常您可以查看函数名称的 Windows 文档并获取您需要的信息需要。您可以找到 documentation for GetLogicalDrives here.
回答你的问题:
整数对应可用驱动器:每个可用驱动器获得1位。因此,如果没有可用的驱动器,您将返回
0
,假设为 32 位整数)。如果每个驱动器都可用,您将得到0b11111111111111111111111111
(二进制)有26个字母,所以循环26个数字。 实际上,您发布的代码只是从 1 循环到 25,我认为这是一个错误。它应该只是
range(26)
.按位与是检查returned整数的各个位。请记住,整数的每个位对应一个盘符。例如,假设您的 C、D 和 G 驱动器可用。您可以像这样想象 returned 值,其中第一行是 potential 驱动器,第二行是 returned二进制值:
ZYXWVUTSRQPONMLKJIHGFEDCBA # drive the bit corresponds to 00000000000000000001001100 # returned value, in binary, if C, D, and G are available
要检查驱动器A是否可用,需要检查最小位是否为1。检查各个位的方法是按位与。进行检查对于最小的位,你会做 drivebits & 1
,要检查驱动器 B,你需要检查第二位:drievebits & (1 << 1)
。要检查 C,您需要第三位:drivebits & (1 << 2)
。等等。
一些例子returns:
如果您只有 C 盘可用,GetLogicalDrives
将 return 0b100
(二进制)或 4
(十进制)。如果 C 和 D 可用,您将得到 0b1100
(二进制)或 12
(十进制)。