2010-06-17 39 views
2

我想知道什麼樣的代碼片斷確實..什麼的代碼片斷確實

Drive[0] = 'A'; 
Drive[1] = ':'; 
Drive[2] = '\\'; 
Drive[3] = 0; 

DriveMask = GetLogicalDrives(); 

for(anIndex = 0; anIndex < 26; 
anIndex++) 
{ 
    if(DriveMask & 1) 
    { 
     Drive[0] = 'A' + anIndex; 

     DriveMask >>= 1; 

    } 
} 

請讓我知道你的答案。

謝謝您的時間閱讀我的文章。

回答

3

它枚舉A:\和Z:\之間所有可能的連接驅動器,並檢查它們是否可移除(例如CD,軟盤)。

它循環26次,並且每次

DriveMask >>= 1; 

使位掩碼可以由1位右移,從而每個邏輯驅動器可以用於經由

if(DriveMask & 1) 

連續進行測試。因此,通過將循環計數添加到字母A(如A,B,C,D,...,Z)並保留之前初始化的:\ GetDriveType()部分就地。

+0

感謝您的回覆花花公子 你能否向我解釋這條線 DriveMask >> = 1; – user198725878 2010-06-17 06:06:36

+1

當然 - 比如你有一個二進制10100101位掩碼(十進制165 = 128 + 32 + 4 + 1)...「DriveMask >> = 1」表示「向右移動DriveMask 1位」。所以在這種情況下,它將從10100101(165)變爲01010010(十進制:64 + 16 + 2 = 82)。最右邊的位下降,零點向左移動。本質上它是一種說「除以2」的方式。 [空間不足 - 正在繼續...] – chrisbtoo 2010-06-17 06:25:11

+1

片段中的含義是,您將代表每個驅動器號的位向下移動,直到位於最右側(1)的位置。當評估「if(DriveMask&1)」時,如果最右邊的位(正在考慮的驅動器)是1(它是已安裝的驅動器),則您將變爲true。有關詳情,請訪問http://en.wikipedia。組織/維基/ Bitwise_operation – chrisbtoo 2010-06-17 06:27:10

1

它檢查是否奇數。

&bit-wise AND comparison

0101 (5) 
& 0001 (1) 
= 0001 (1 -- true) 

    1110 (14) 
& 0001 (1) 
= 0000 (0 -- false) 

在這種情況下,GetLogicalDrives返回一個數字,其位表示存在某些驅動器。最低有效位(2 ,1)表示A驅動器。

4

它檢查是否設置了最低位,即是否有A變頻器。見GetLogicalDrives

+1

它檢查是否設置了0到25之間的* all *位,即是否有A-Z驅動器。 – chrisbtoo 2010-06-17 05:59:27

+1

它不檢查所有,因爲如果A不是驅動器,如果和「DriveMask >> = 1;它永遠不會進入內部」永遠不會被執行。 – rplusg 2010-06-17 07:47:26

+0

oooh,+1 calvin ...錯過了 - 我認爲我們可以假設它是/意味着/要檢查它們,但是它被竊聽(似乎沒有意義的檢查同一個驅動器26次)。 – chrisbtoo 2010-06-18 13:46:07

1

表達Drives & 1正在測試看到的Drives0x00000001之間的邏輯and結果是非零的。因此它檢查是否Drives是奇怪的。

1

實際API返回回覆二進制格式: - 在這裏什麼MSDN說一下

「 如果函數成功,返回值是表示當前可用的磁盤驅動器位掩碼位的位置0(最不。顯著位)爲驅動器A,第1位是驅動器B,第2位是驅動器C,等等。 「

裝置

if(Drives & 1) // i dont understand this if condition here that what it checks ? { 

} 

條件檢查數字驅動presense。

2

在C++中,&是一個按位和。

所以取值Drives並與0x00000001按位進行比較。如果數字是奇數,結果應該是1(只有奇數的方式是最低有效位是1)。由於0和1 = 0,所以除了最低有效位之外,它基本上將所有的值清零。如果該位爲1,那麼結果爲1並且計算結果爲真。

否則它是0,並且你不打if。

1

GetLogicalDrives函數返回一組邏輯驅動器,其中每個驅動器編碼爲一位(二進制數字,可以是0或1)。驅動器標籤從位0開始(最低有效位)爲「A」。如果驅動器存在,則該位爲1,否則爲0.上述代碼中的&是對測試位0進行邏輯與運算。本質上,此代碼檢查系統是否具有「A:\」驅動器。

0

這段代碼並沒有在這個詞的共同理解中做任何事情,做了。此代碼僅包含非修改的查詢類型操作,無副作用,即它會進行一些查詢並驗證某些條件,但不會根據這些條件的結果進行任何操作。

換句話說,如果這段代碼被送入一些假設的超優化編譯器,它也知道Windows API,那編譯器會簡單地扔掉(優化掉)整個代碼,因爲它不會任何東西。

顯然,您提供的代碼是假的 - 它不是整個代碼。沒有整件事情,就不可能說出它應該做什麼。但是,如果我們想這一些有用的功能應該是在{}之間存在以下if

if(GetDriveType(Drive) == DRIVE_REMOVABLE) 
{ 
    // Actually DO something here 
} 

那麼我們可以對什麼是應該做的一個猜測。此代碼重複了Windows系統中所有可能的單字母驅動器名稱。它檢查系統中是否存在由該字母指定的邏輯驅動器。如果驅動器存在,它會檢查此驅動器是否可以使用可移動介質。最後,如果這是真的,那麼它會做一些有用的事情,但你沒有向我們展示。我不知道它是什麼。沒人會。