2014-04-17 56 views
0

我只是一個新手,當涉及到按位運算 - 如果這甚至是正確的術語 - 並且正在尋找一種更好的方法來執行邏輯整型返回碼(這是各種Unix程序的標準)。即返回代碼可能是1,2,4,8任意組合等解析WEXITSTATUS通過按位運算在C中求和的返回碼

這裏是我的代碼(片段),到目前爲止:

[...] 
if (result == 0) 
    //no problem 
else { 
    if ((result > 127) && (result % 128 == 0)) { 
     // exit code contained 128 
     result = result - 128; 
    } 
    if ((result > 63) && (result % 64 == 0)) { 
     // exit code contained 64 
     result = result - 64; 
    } 
    [...] 
    if (result > 0) { 
     // exit code contained 1 
    } 
} 

我知道,我應該能夠有一個做到這一點按位運算符,如AND(&),但我不知道如何去做。雖然我並不十分了解按位操作,即如果我的確如果返回代碼是128,那麼if (result & 64)也可能不是真的?

顯然我對二進制數學的理解是令人震驚的,我從來沒有真正做過這方面的代碼。只是尋找一些正確的按位方法的說明。

+1

也許更適合http://codereview.stackexchange.com/,因爲您似乎有工作代碼。 –

+1

'WEXITSTATUS'和''中的其他宏將爲您執行所有的位操作。自己做這件事沒有必要也不需要。 –

+1

'int contains_128 = result&128,contains_64 = result&64,...' – twalberg

回答

1

正如在Wumpus Q Wumbley的評論中指出的,對於「標準」公用程序/退出代碼,在<sys/wait.h>中有一組宏,它們對於從退出代碼中提取信息是有用的和推薦的。不過,如果你想處理的退出代碼不遵循那些平常慣例,你可以用這樣一個簡單的邏輯與操作提取單個位:

int bit_7_is_set = result & (1U << 7); // a.k.a. 128 

如果與操作的結果是非-zero(在上述情況下,它將爲0或128),則在result中設置相應的位。