0

当涉及到按位数学时,我只是一个新手 - 如果这甚至是正确的术语 - 并且正在寻找一种更好的方法来对 int-summed 返回代码进行逻辑处理(这是各种 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,我是否也能做到这一点?

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

4

1 回答 1

1

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

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

如果 AND 运算的结果非零(在上述情况下为 0 或 128),则在result.

于 2014-04-18T13:38:55.993 回答