当谈到按位数学时,我只是一个新手 - 如果这甚至是正确的术语 - 并且正在寻找一种更好的方法来对 int 求和返回代码进行逻辑处理(这是各种 Unix 程序的标准)。 IE。返回码可以是 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,那也不是真的吗?
显然我对二进制数学的理解是令人震惊的,我从来没有真正在这个领域编写过代码。只是寻找正确的按位方法的一些说明。
最佳答案
正如 Wumpus Q Wumbley 在评论中所指出的,对于“标准”实用程序/退出代码,<sys/wait.h>
中有一组宏。对于从退出代码中提取信息很有用并推荐。但是,如果您尝试处理的退出代码不遵循这些通常的约定,您可以使用简单的逻辑 AND 运算提取各个位,如下所示:
int bit_7_is_set = result & (1U << 7); // a.k.a. 128
如果 AND 运算的结果非零(在上述情况下为 0 或 128),则在 result
中设置相应的位。 .
关于c - 通过按位运算在 C 中解析 WEXITSTATUS int-summed 返回代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23137135/