c - 通过按位运算在 C 中解析 WEXITSTATUS int-summed 返回代码

标签 c bit-manipulation c89 wexitstatus

当谈到按位数学时,我只是一个新手 - 如果这甚至是正确的术语 - 并且正在寻找一种更好的方法来对 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/

相关文章:

c - 如何在 C89 中将 boolean 值插入位域

c - 我应该 `#ifdef DEBUG` 保护 .c 文件中的调试功能吗?

c - 等效于两个按位运算

java - 测试无效位标志

c - 64 位数字的 NOT 在 c 中给出错误结果

c - 为什么这个 C 程序符合并运行

c - 符合 ANSI C 标准的平台,其中全零位不是空指针表示

c - 在 C 中反转字符串时出现运行时错误

c - 从 void* 变量推断类型

C,将 AWK 语法作为参数传递给 execl