2014-09-23 3 views
1

나는 i 번째 비트가 무엇인지 상관없이 i 번째 비트를 0으로 설정하고 싶습니다.i 번째 비트를 0으로 설정 하시겠습니까?

unsigned char pt = 0b01100001; 
    pt[0] = 0; // its not how we do this... 

하나에 설정, 우리는 마스크 pt | (1 << i)을 사용할 수 있습니다하지만 난 그게 가능하면 0을 설정하는 마스크를 생성하는 방법을 모르겠어요.

+1

는 비트 단위 AND와보십시오. – juanchopanza

+0

@juanchopanza OK – GivenPie

+1

pt & = ~ (1 << i) – cppguy

답변

5

로직 OR을 로직 AND으로 교체하기 만하면됩니다. 당신은이에 대한 & 연산자를 사용합니다 : 반전

pt = pt & ~(1 << i); 

당신이 당신의 마스크 그래서 당신은 지정해야합니다 것 ... 0이 삭제됩니다 동안 비트를 유지하는 1로 보내고 논리적 AND 때문에 지우기를 원하는 위치에 0을 입력하십시오. 특히 1 << i을 수행하면 000...010..000 인 마스크가 제공되며 여기서 1은 원하는 비트 위치에 있고 반전하면 111...101...111이됩니다. 논리 AND을 입력하면 원하는 비트가 지워집니다.

+0

감사합니다, 감각을 많이 만들었습니다. – GivenPie

+0

@GivenPie - 걱정하지 마세요! ... 그러나 그 지적되는 중복 질문은 훨씬 더 포괄적입니다. 당신도 그 제안을 줄 것을 제안하십시오. – rayryeng

1

이 스틱 수 :

// Set bit at position `bitpos` in `pt` to `bitval` 
unsigned char bitpos = 1; 
unsigned char pt = 0b01100001; 
bool bitval = 1; 

// Clear the bit 
pt &= ~(1u << bitpos); 
// Set the bit 
pt |= (bitval << bitpos); 
관련 문제