2013-07-16 4 views
1

죄송합니다.이 코드가 중복되는 경우, 원하는 코드를 찾을 수 없습니다. C 비트 단위 연산 관련 비트

난 바이트의 현재 값을 가지고

00,110,001

및 I 다른 값을 쓸 필요 :

10001001 B를

하지만 제 2 바이트에서 일부 비트들만 이 적합합니다. 관련 비트 는

11000000 C

최종 바이트의 비트에 대해 B 될 위치의 비트에 대해 C == 1 및 여기서 C ==이 비트의 하나로 것들 0. if 문없이 어떻게 할 수 있습니까? 그것이 어떻게 작동하는지

finalByte = (B & C) | (A & ~C); 

분해 - B & C의 결과가 C의 비트가 B의 모든 비트를 포함하는 바이트 :

대답

는 D에게 10,110,001

+2

'if'는 루프가 아니므로 분기 구문입니다. 어쨌든 [비트 AND 연산자] (http://en.wikipedia.org/wiki/Bitwise_operations_in_C#Bitwise_AND_.22.26.22)를 찾고 계십니까? –

+2

(B & C) | (A & C) – jonhopkins

+0

"if loops"같은 것이 없습니다. 아마도 "if 문"을 의미 할 것입니다. –

답변

7

마스크와 결합입니다 세트 (정상 마스킹 동작). A & ~CA의 비트가 모두있는 바이트를 산출하며 여기서 비트는 C입니다. 따라서 ~의 보수 연산이 수행됩니다. |은 두 바이트를 최종 바이트로 결합합니다.

5
(B & C) | (A & ~C) 

첫 번째 식은 C가 설정 B의 비트를 유지한다; 두 번째 비트는 A 비트 만 유지합니다. 여기서 C이 아니며이 설정됩니다. 논리적이거나 두 비트 세트를 결합하여 원하는 결과를 제공합니다.