通过按位运算解析W中的WEXITSTATUS归零返回码

时间:2014-04-17 15:24:02

标签: c bit-manipulation c89 wexitstatus

对于按位数学来说,我只是一个新手 - 如果这甚至是正确的术语 - 并且正在寻找一种更好的方法来对归类返回代码执行逻辑(就像标准一样)适用于各种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,那么这也不是真的吗?

显然,我对二进制数学的理解令人震惊,我从来没有真正完成这方面的代码。只是寻找一些正确的按位方法的澄清。

1 个答案:

答案 0 :(得分:1)

正如Wumpus Q Wumbley的评论所指出的那样,&#34;标准&#34;实用程序/退出代码,<sys/wait.h>中有一组宏,它们非常有用,建议用于从退出代码中提取信息。但是,如果您尝试处理的退出代码不遵循这些常规约定,则可以使用简单的逻辑AND操作提取单个位,如下所示:

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

如果AND运算的结果非零(在上述情况下它将为0或128),则在result中设置相应的位。