解析WEXITSTATUS通过按位运算在C中求和的返回码
问题描述:
我只是一个新手,当涉及到按位运算 - 如果这甚至是正确的术语 - 并且正在寻找一种更好的方法来执行逻辑整型返回码(这是各种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)
也可能不是真的?
显然我对二进制数学的理解是令人震惊的,我从来没有真正做过这方面的代码。只是寻找一些正确的按位方法的说明。
答
正如在Wumpus Q Wumbley的评论中指出的,对于“标准”公用程序/退出代码,在<sys/wait.h>
中有一组宏,它们对于从退出代码中提取信息是有用的和推荐的。不过,如果你想处理的退出代码不遵循那些平常惯例,你可以用这样一个简单的逻辑与操作提取单个位:
int bit_7_is_set = result & (1U << 7); // a.k.a. 128
如果与操作的结果是非-zero(在上述情况下,它将为0或128),则在result
中设置相应的位。
也许更适合http://codereview.stackexchange.com/,因为您似乎有工作代码。 –
'WEXITSTATUS'和''中的其他宏将为您执行所有的位操作。自己做这件事没有必要也不需要。 –
'int contains_128 = result&128,contains_64 = result&64,...' – twalberg