Синтаксический анализ WEXITSTATUS возвращаемых суммированных кодов возврата в C с помощью побитовой операции
Я только новичок, когда дело доходит до побитовой математики - если это даже правильный термин - и искал лучший способ сделать логику для кода возврата с внутренним суммированием (как это стандартно для различных программ 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?
Очевидно, мое понимание бинарной математики шокирует, я никогда не делал код в этой области. Просто ищу разъяснения о правильном побитовом методе.
1 ответ
Как указано в комментариях Wumpus Q Wumbley, для "стандартных" утилит / кодов выхода существует набор макросов в <sys/wait.h>
которые полезны и рекомендуются для извлечения информации из кодов выхода. Однако, если коды выхода, которые вы пытаетесь обработать, не соответствуют этим обычным соглашениям, вы можете извлечь отдельные биты с помощью простой логической операции И, например:
int bit_7_is_set = result & (1U << 7); // a.k.a. 128
Если результат операции AND не равен нулю (в приведенном выше случае это будет 0 или 128), соответствующий бит устанавливается в result
,