• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

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

22.01.11 20:34 작성 조회수 134

0

char_to_binary(data[i])

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

 

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

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

 

 

답변 1

답변을 작성해보세요.

1

강민철님의 프로필

강민철

2022.01.12

안녕하세요 :)

뒤에서부터 출력한 이유는 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