簡體   English   中英

通過按位運算在C中解析WEXITSTATUS整數求和的返回碼

[英]Parsing WEXITSTATUS int-summed return code(s) in C via bitwise operation

我只是關於按位數學的新手-如果這甚至是一個正確的詞-並正在尋找一種對整數求和的返回碼進行邏輯處理的更好方法(這是各種Unix程序的標准)。 即返回碼可以是1,2,4,8等的任意組合

到目前為止,這是我的代碼(摘要):

[...]
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(&)之類的按位運算符來執行此操作,但不確定如何執行此操作。 我對位操作並不太了解,例如, if (result & 64) ,如果返回碼為128,那我if (result & 64)也不是真的?

顯然,我對二進制數學的理解令人震驚,我從未真正完成過該領域的代碼。 只是尋找一些正確的按位方法的說明。

正如Wumpus Q Wumbley的評論中指出的那樣,對於“標准”實用程序/退出代碼,在<sys/wait.h>中有一組宏,這些宏對於從退出代碼中提取信息非常有用並建議使用。 但是,如果您嘗試處理的退出代碼未遵循這些通常的約定,則可以使用簡單的邏輯AND操作提取單個位,如下所示:

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

如果AND運算的結果為非零(在上述情況下為0或128),則在result設置相應的位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM