2014-12-30 1 views
6

프로그래밍 할 때 새로운 기능입니다. 최근에 나는 숫자의 특정 비트 0을 만들어야 만하는 문제를 발견했다. 예를 들어C++에서 특정 비트를 "0"으로 지정

:

내가 0으로 4 비트를 만들고 싶어 이제 다수의 페이지를

p  = 73 
binary = 1001001 

을 가지고, 그 1,000,001 (2) (65) (10)

내가 한을 =입니다 이 방법은 다음과 같습니다.

int p = 73; 
int pos = 1<<3; // 4th bit 
int max_bit = (1<<31) - 1; // making all bit to 1 
int mask = pos^max_bit; // making 4th bit to 0 except others 
p = p & mask; // changing 4th bit of p to 0 
cout<<p<<endl; 

더 좋은 방법이 있나요?

+0

단지로 "했다 당신이 알고"그 비트를 클리어라고합니다. 그것을 "1"로 만드는 것은 비트를 설정하는 것으로 불린다. – bolov

+0

나는 그것을 몰랐다. (그러나 나는 지금 :) thanks – Elliot

답변

14

그냥 사용

p = p & ~(1u<<3); 

은 무엇 여기됩니까?

1. (1u<<3)  0...01000 
2. ~(1u<<3)  1...10111 // Invert the bits 
3. p & ~(1u<<3) *****0*** // Here * means the bit representation of p 

0
에 비트 변경이 도움이 :) 희망 방법은 그

+6

어쩌면 비트 조작에 익숙하지 않은 사람들을위한 설명을 추가 할 수 있을까? – jpw

+0

오케이. .. 설명을 추가하고 있습니다. –

+0

제 생각에,'p & ~ (1u << n);을 쓰는 것이 낫습니다. –