인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

realbrother98님의 프로필 이미지
realbrother98

작성한 질문수

홍정모의 따라하며 배우는 C언어

15.10 비트필드의 사용방법

강의 맨 앞에서 코드 수정 이유가 궁금합니다.

작성

·

187

0

char_to_binary(data[i])

-> char_to_binary(data[bytes - 1 - i])

 

이렇게 수정한 이유가 궁금합니다.

앞에서부터 2진수로 나타내야 하는 거 아닌가요?

 

 

답변 1

1

안녕하세요 :)

뒤에서부터 출력한 이유는 x86 CPU는 리틀엔디안을 사용하기 때문입니다.

 

빅엔디안을 사용하는 CPU에서는 char_to_binary(data[i])

이렇게 출력하시면 코드대로 출력이 되겠으나,

리틀 엔디안은 메모리의 낮은 번지에서 높은 번지 순으로 뒤에서부터 저장이 되기 때문에 반대로 저장이 된 겁니다.

 

리틀 엔디안과 빅엔디안에 대해 조금 더 설명을 드리자면,

이는 메모리에 데이터를 저장하는 순서를 나타냅니다.

가령 "ABCD" 라는 문자열이 있다고 해보죠.

빅 엔디안을 사용하는 체계에서는 낮은 주소에서부터 A, B, C, D 순으로 저장됩니다.

 

하지만 리틀 엔디안을 사용하는 체계에서는 낮은 주소에서부터 D, C, B, A 순으로 저장됩니다.

그래서 강의 내에서도 출력이 반대로 이루어진 것입니다.

 

엔디안에 대해서 조금 더 알고 싶으시다면 아래 링크를 참고해보시고,

추가 질문이 있으시다면 언제든 댓글 달아주세요.

 

감사합니다.

http://www.tcpschool.com/c/c_refer_endian  

realbrother98님의 프로필 이미지
realbrother98

작성한 질문수

질문하기