문제점비트 마스킹 문제에 대한 좋은 해결책은 무엇입니까?
- I 다른 비트에 영향을주지 않고 다른 조합으로 비트의 조합을 변경하고 싶다. 최고의 마스킹 솔루션 무엇 :이 조합에서
- 는 일부 비트는 해제 또는 이
질문을 설정해야합니다. 특히 해제 masking.I
예를 들어 변화 비트 [3 : 0] -> 0b1011 (데이터) 목적 비트 [3 : 0] -> 0b0110
날 I 시도 어떻게 공유 할 0b0110 :
- 설정되지 않은 마스크를 작성
그리고이 두 개의 마스크를 사용하여 비트 연산을 사용할 수 있습니다.
int data = 0xB; /*0b1011 (0xb) -> 0110 (0x6)*/ int umask = 0x9; /*unset mask 0b1001*/ int smask = 0x6; /*Set Mask 0b0110*/ data &= ~umask; /*Unset the bits what needs without affecting other*/ data |= smask; /*Set the bits what needs to be set*/
일반 솔루션을 요청하십니까? 또는 이러한 설정 값에 대해 제안 된 솔루션 이외의 다른 (더 나은) 솔루션이 있는지 알고 싶습니까? – AntonH
당신이 묘사하는 것은 정확히 그것이 일반적으로 행해지는 방식입니다. 컴파일러가 나머지 작업을 수행합니다. –
비트 트위 빙시 마이크로 컨트롤러 (예 : AVR)에서 매우 일반적인 패턴.'PORTB | = 1 << 2; '와 같은 라인은 하나의'SBI' set-bit 어셈블리 명령어로 변환 될 것입니다. –