Перевод и объяснение кода C ++ - PullRequest
1 голос
/ 15 июня 2011

У меня есть следующий фрагмент кода C ++. У меня есть базовое понимание кода на C ++. Пожалуйста, исправьте мое объяснение следующего кода, когда это необходимо:

for (p = q->prnmsk, s = savedx->msk, j = sizeof(q->prnmsk);
           j && !(*p & *s); j--, p++, s++);

Что он содержит: q это char * q (как объявлено) - это тип структуры MSK согласно коду. q-> prnmsk содержит байтовые данные, где prnmask содержит 15 байтов.

Это похоже на с. Таким образом, в цикле for при уменьшении j он будет проходить через каждый байт и выполнять эту операцию !(*p & *s), чтобы продолжить цикл, и в конце концов, если условие не будет выполнено, цикл завершится, иначе j будет работать до j == 0.

Я прав? Что означает * p и * s? Будет ли оно содержать байтовое значение?

Ответы [ 2 ]

3 голосов
/ 15 июня 2011

Некоторые (как я) могут подумать, что следующее более читабельно

int j;
for (j = 0; j < sizeof(q->prnmsk); ++j)
{
  if ((q->prnmsk[j] & savedx->msk[j]) != 0) break;
}

, что будет означать, что q-> prnmsk и savex-> msk итерируются, чтобы найти первый случай, когда бит и обане ноль.если j равно sizeof (q-> prnmsk), все битовые значения равны нулю.

1 голос
/ 15 июня 2011

Да, вы правы. !(*p & *s) означает, что они хотят проверить, если q->prnmsk и savedx->msk не имеют соответствующих битов, установленных на 1 одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...