2011-06-15 2 views
1

다음 C++ 코드 조각이 있습니다. 가 포함 된 무엇C++ 코드 변환 및 설명

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

: q는 (선언) * Q 문자입니다 코드에 따라 구조 MSK의 유형 나는 지금 필요한 다음과 같은 코드의 내 설명을 수정 code.Please C++의 기본적인 이해가 . q-> prnmsk에는 prnmask가 15 바이트를 포함하는 바이트 데이터가 들어 있습니다.

s와 비슷합니다. for 루프에서 j가 감소하면 각 바이트를 통과하여이 !(*p & *s) 작업을 수행하여 루프를 계속 진행하고 결국 조건이 충족되지 않으면 루프가 종료되고 j는 j == 0까지 실행됩니다.

맞습니까? * p와 * s는 무엇을 의미합니까? 바이트 값이 포함됩니까?

+0

모든 변수 선언 코드를 제공해 주시겠습니까? –

+0

p가 포인터 인 경우 * p는 해당 포인터가 가리키는 객체입니다 –

답변

3

(나 같은) 일부는 다음과 더 읽을 수 있는지 생각 Q-> prnmsk 및 savedx-> MSK의를 선두를 찾기 위해 반복되는 경우 비트 AND 연산 모두는 것을 의미

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

0이 아닙니다. j가 sizeof와 같으면 (q-> prnmsk), 모든 비트 연산은 0입니다.

+0

감사합니다. 이 질문의 코드는 나를 혼란스럽게 만들었다. – JavaBits

1

네, 맞습니다. !(*p & *s)q->prnmsksavedx->msk에 대응하는 비트가 1으로 동시에 설정되어 있지 않은지 확인하려고 함을 의미합니다.