강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

ckstj8027님의 프로필 이미지
ckstj8027

작성한 질문수

독하게 시작하는 C 프로그래밍

비트필드

비트필드 질문

해결된 질문

작성

·

32

0

오른쪽부터 차례로 1 2 3 2 로 비트필드를 나누고

1 3 7 5 일때

101 111 11 1

여기서 5는 필드 초과되어서 버려서

01 111 11 1 가 됬는데

여기서 unsigned char* 로 포인터 형을 강제로 바꾸어

0111 1111 이렇게 만든상황에서 0x06 하고 엔드 연산을 할때

0111 1111

0000 0110

를 엔드 연산하면

0000 0110

인데 이걸 왜 >> 연산해서 3 으로 작은값나오게 했나요 ?

0000 0011

그에 대한 언급이 없으셔서 질문 남깁니다

답변 2

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

강의 어느 부분인지 알려주시면 다시 답변올리겠습니다. 고맙습니다. 😄

0

안녕하세요, 인프런 AI 인턴입니다.

ckstj8027님, 비트필드와 비트 연산에 관한 질문을 주셨네요. 비트 연산은 C 프로그래밍에서 데이터를 효율적으로 다루기 위한 중요한 기법입니다. 주어진 질문에서, 비트필드를 나누고 특정 비트패턴에서 비트 연산을 수행하는 과정에서 오해가 생긴 것 같습니다.

질문 요약:
1. 오른쪽부터 비트를 1, 2, 3, 2로 나눕니다.
2. 값 1, 3, 7, 5를 각각 해당 비트필드에 넣었으나, 마지막 5는 필드 초과로 잘립니다.
3. 결과적으로, 비트열이 01 111 11 1이 되고, unsigned char* 포인터 형으로 강제 변환하여 8비트 0111 1111의 상태가 됩니다.
4. 0x06과 AND 연산을 합니다:
- 0111 1111 AND 0000 0110 결과: 0000 0110
5. 이 결과를 오른쪽으로 >> 연산하여 0000 0011 즉, 3으로 변환한 이유에 대한 질문입니다.

비트 연산 설명:
- >> 연산은 비트를 오른쪽으로 이동시키는 연산입니다. 주어진 상황에서, AND 연산 후 오른쪽으로 이동을 한 이유는 원하는 특정 비트패턴이나 값을 얻기 위함일 가능성이 큽니다.

다음은 몇 가지 가능성입니다:
- 비트필드에서 필요한 정보를 정렬된 형태로, 다시 말해 특정 위치로 이동시켜 해석하기 위해 사용했을 수 있습니다.
- 특정 비트 위치에서의 효과적인 값을 획득하거나, 데이터를 추출하기 위해 오른쪽으로 이동해 원래의 기대하는 결과 형식으로 맞춘 것으로 생각됩니다.

이와 같은 문맥에서는 비트 연산이 어느 위치의 비트가 필요한지를 아는 것이 중요합니다. 만약 수업 내용에서 다른 목적이나 의미가 있었다면, 추가적인 강의 자료나 내용이 필요할 수 있습니다.

이와 유사한 질문이나 내용이 있는 기존 질문을 참조하실 수도 있습니다:
- 비트 연산자 사용에서 오는 값 조정 설명 - 이 게시물은 비트 조작에서 AND, OR와 같은 연산을 통해 비트 결과 조정에 관한 이해를 돕습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ckstj8027님의 프로필 이미지
ckstj8027

작성한 질문수

질문하기