2013-04-10 5 views
4

그래서 16 비트 숫자가 있습니다. 변수 이름이 Bits라고합시다. 나는 비트 [2 : 0] = 001, 100, 000을 다른 것으로 바꾸지 않고 만들고 싶습니다. 나는 어떻게 생각하는지 모르겠다. 왜냐하면 내가 생각할 수있는 것은 내가 1과 1이 되길 원하는 비트를 ORing하는 것이지만, 다른 비트들을 지우는 방법을 확신하지 못하기 때문이다. 만약 누군가가 그렇다면 조언 해 주시면 고맙겠습니다. 감사!C에서 int의 비트를 변경합니까?

+0

[시프트 연산자] (http://en.wikipedia.org/wiki/Bitwise_operation#Shifts_in_C.2C_C.2B.2B.2C_C.23) – Anthony

+0

먼저 "비트"라고 부르지 않을 것입니다. "비트"라고합니다. –

+0

http://en.wikipedia.org/wiki/Bitwise_operations_in_C –

답변

5

특정 비트를 지우려면 지울 비트의 역수로 &을 지우십시오. 그러면 원하는 비트로 | 수 있습니다. 이 경우

, 당신은 (바이너리 또는 10 진수의 7111) 하위 3 개 비트를 제로하려는, 그래서 우리 ~7& 그 비트를 취소 할 수 있습니다.

Bits = (Bits & ~7) | 1; // set lower three bits of Bits to 001 
+0

물어 보는 사람이 비트 연산자를 모른다면 '~ 7'이 무엇인지 설명하는 것이 도움이 될 수 있습니다. –

+0

@ 가브리엘 : 완료. – nneonneo

+0

오! 네가 할 수 있다는 것을 몰랐어 ... 고마워! – user2253332

1

union 구조 변수가 갖는 비트의 수를 지정하고 개별적으로 큰 변수의 각각의 비트를 처리 할 수있는 능력을 허용한다.

union { 
    short value; 
    struct { 
     unsigned char bit0 : 1; 
     unsigned char bit1 : 1; 
     unsigned char bit2 : 1; 
     unsigned char bit3 : 1; 
     unsigned char bit4 : 1; 
     unsigned char bit5 : 1; 
     unsigned char bit6 : 1; 
     unsigned char bit7 : 1; 
     unsigned char bit8 : 1; 
     unsigned char bit9 : 1; 
     unsigned char bit10 : 1; 
     unsigned char bit11 : 1; 
     unsigned char bit12 : 1; 
     unsigned char bit13 : 1; 
     unsigned char bit14 : 1; 
     unsigned char bit15 : 1; 
    } bits; 
} var; 

이제 var.value에서 참조 할 수있는 16 비트 정수를 개최 var라는 이름의 변수를 가지고, 당신은 var.bits.bit15을 통해 var.bits.bit0을 acessing하여이 변수의 각 비트에 액세스 할 수 있습니다.

var.value = 0;으로 설정하면 모든 비트도 0으로 설정됩니다. var.bits.bit0 = 1;을 설정하면 var.value의 값이 0x8000 또는 바이너리로 표시되는 1000000000000000으로 자동 변경됩니다. 당신이 의도 만 3 개 마지막 비트를 변경하는 경우

, 더 이런 식의 구조를 단순화 할 수 있습니다 :

이제
union { 
    short value; 
    struct { 
     unsigned short header : 13; 
     unsigned char bit13 : 1; 
     unsigned char bit14 : 1; 
     unsigned char bit15 : 1; 
    } bits; 
} var; 

당신이 var.bits.header을 가지고, 그 13 비트 변수 및 기타 3 1 비트 변수로 재생할 수 있습니다.

그러나 C++은 이러한 종류의 구조를 지원하지 않으므로 C에서 C++ 로의 이식성을 높이려면 @nneonneo에서 제안한대로 bitwise operations을 사용하는 것이 좋습니다.

관련 문제