对于按位数学来说,我只是一个新手 - 如果这甚至是正确的术语 - 并且正在寻找一种更好的方法来对归类返回代码执行逻辑(就像标准一样)适用于各种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,那么这也不是真的吗?
显然,我对二进制数学的理解令人震惊,我从来没有真正完成这方面的代码。只是寻找一些正确的按位方法的澄清。
答案 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
中设置相应的位。