그래서 16 비트 숫자가 있습니다. 변수 이름이 Bits라고합시다. 나는 비트 [2 : 0] = 001, 100, 000을 다른 것으로 바꾸지 않고 만들고 싶습니다. 나는 어떻게 생각하는지 모르겠다. 왜냐하면 내가 생각할 수있는 것은 내가 1과 1이 되길 원하는 비트를 ORing하는 것이지만, 다른 비트들을 지우는 방법을 확신하지 못하기 때문이다. 만약 누군가가 그렇다면 조언 해 주시면 고맙겠습니다. 감사!C에서 int의 비트를 변경합니까?
답변
특정 비트를 지우려면 지울 비트의 역수로 &
을 지우십시오. 그러면 원하는 비트로 |
수 있습니다. 이 경우
7
에
111
) 하위 3 개 비트를 제로하려는, 그래서 우리
~7
와
&
그 비트를 취소 할 수 있습니다.
Bits = (Bits & ~7) | 1; // set lower three bits of Bits to 001
물어 보는 사람이 비트 연산자를 모른다면 '~ 7'이 무엇인지 설명하는 것이 도움이 될 수 있습니다. –
@ 가브리엘 : 완료. – nneonneo
오! 네가 할 수 있다는 것을 몰랐어 ... 고마워! – user2253332
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을 사용하는 것이 좋습니다.
- 1. int의 비트를 long으로 가져 오기
- 2. int의 개별 비트를 mips로 asses?
- 3. 포인터가 C에서 int의 크기라고 가정하는 것이 안전한가요?
- 4. C - 같음을 위해 int의 n 번째 비트를 비교해야합니다.
- 5. int의 비트를 기반으로 배열 요소를 결합/결합 할 수 있습니까?
- 6. (32 비트) int의 처음 25 비트를 섞는 알고리즘을 찾고 있는데
- 7. C에서 바이트의 특정 비트를 뒤집는 방법은 무엇입니까?
- 8. 스위프트를 사용하여 비트를 어떻게 이동합니까? 오브젝티브 C에서
- 9. C에서 파일에 단일 비트를 쓰는 방법
- 10. C에서 바이트의 비트를 보는 방법은 무엇입니까?
- 11. C에서 잠금 비트를 사용하여 이미지 쓰기 #
- 12. GLSL의 int의 최상위 비트
- 13. int의 배열을 int의 배열로 변환
- 14. C에서의 부호없는 int의 동작
- 15. 부호있는 int의 엔디안 변환
- 16. c에서 int의 비트 너비를 찾습니다. best-cross platform method
- 17. C에서 int의 주소를 char 포인터로 변환하는 방법은 무엇입니까?
- 18. int의 각 니블에서 비트 전환
- 19. INT의 IDENTITY (#, #)
- 20. 8 비트 프로세서에서 int의 크기는 얼마입니까?
- 21. C에서 비트 오른쪽 시프트에서 제거 된 비트를 얻는 방법 #
- 22. C에서 한 줄에 여러 비트를 설정하는 방법은 무엇입니까?
- 23. 빠른 : int의 상위 2 비트 설정
- 24. 부호없는 int의 n 번째 비트 설정
- 25. 서명 된 16 비트 값인 Java int의 맨 아래에있는 16 비트를 가져옵니다.
- 26. 비트를 잃지 않고 C에서 시프트를 수행하려면 어떻게해야합니까? 이 같은 것을 할 C에서
- 27. int의 getter/setter 만들기?
- 28. int의 숫자 문자열
- 29. C# ORDERBY INT의 LINQ
- 30. int의 벡터로부터 일련의 비트까지
[시프트 연산자] (http://en.wikipedia.org/wiki/Bitwise_operation#Shifts_in_C.2C_C.2B.2B.2C_C.23) – Anthony
먼저 "비트"라고 부르지 않을 것입니다. "비트"라고합니다. –
http://en.wikipedia.org/wiki/Bitwise_operations_in_C –