[英]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.