inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

15.10 비트필드의 사용방법

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

208

realbrother98

작성한 질문수 11

0

char_to_binary(data[i])

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

 

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

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

 

 

c

답변 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  

Export template 안됨

1

65

2

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

90

3

main 함수에서 왜 int만 선언이 되는걸까요

1

80

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

75

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

78

1

프로토타입과 함수간의 인자 불일치

1

87

2

12.12 헤더 관련 질문

1

74

2

Visual Studio Community 2026 사용 문의

1

170

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

72

2

getchar(), putchar()

1

111

3

강의자리ㅛ

1

93

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

127

2

소스파일안에 여러 파일

1

87

2

F5와 F7의 차이

1

90

2

c = TWO * (a+b); 에서 a와 b는?

1

67

2

; 세미콜론을 붙이는 기준에 문의

1

78

1

Step over 기능 문의

1

64

2

2.6 강의 따옴표 출력 규칙 문의

1

87

2

int main 함수 관련 오류 문의

1

76

2

13.4 words[0]

0

73

2

11.7 함수를 구현해 봤습니다.

1

67

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

71

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

61

2

11.6 fit_str함수를 구현해 봤습니다.

1

59

2