inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

3.6 정수의 오버플로우

이렇게 이해한 것이 바르게 이해한 것 인가요?

해결된 질문

282

햄쮸맨

작성한 질문수 3

1

안녕하세요 반갑습니다.

 

강의 22분 09초 경의 설명을 보고

 

부호 없는 정수의 언더 플로우가 헷갈려서 좀 생각을 해봤습니다.

 

unsigned int k = 0;

 

k = k-1;

 

printf("k = %u\n", k);

을 하면

 

k의 비트가 00000000000000000000000000000000였는데

 

리터럴 1을 빼면

 

ALU내부에선 -1을 더하게 되는 것과 같고

 

-1은 11111111111111111111111111111111비트여서

 

둘의 합연산 결과가 11111111111111111111111111111111이 되고 이걸 %u로 출력해주면 unsigned int의 최대값인 4294967295가 나오는 건가요? 질문 1)

 

10000비트에서 1을 뺀다는 설명 때문에 약간 헷갈리긴 하는데 직관적으로 이해를 돕기 위해 그렇게 설명해주신 거라고 보면 될까요? 질문 2)

 

그리고 추가적으로 C언어가 리터럴 상수를 해석하는 과정이 참 흥미로운데 이건 강의 후반부에 다뤄주시나요? 꽤나 궁금하네요. 질문 3)

 

 

질문 1) 2) 3)에 각각 대답해주시면 감사 하겠습니다.

c

답변 1

2

Soobak

안녕하세요, 답변 도우미 Soobak 입니다.

 

질문 1) 부호 없는 정수의 언더플로우 관련 질문
: 네, 맞습니다.
unsigned int 자료형은 부호가 없는 정수형이므로, 이 경우 0 에서 1 을 빼면 언더플로우가 발생합니다.
컴퓨터가 2의 보수 방식으로 계산하는 과정을 거치면, uinsinged int 자료형의 최대값 4294967295(32비트 환경에서)이 됩니다.
따라서, 0 - 11111...1111 과 같은 비트 표현을 가지며, 이는 4294967295 가 됩니다.

 

질문 2) 10000 비트에서 1 을 빼는 것과 같다는 내용의 설명
: 강의에서 0000 에서 1 을 빼면 1111 이 되는 과정에 대해서, "실제 비트에서 맨 앞자리의 1 은 없지만, 마치 10000 에서 1 을 빼는 것처럼 작동한다" 는 맥락으로 이해하시면 좋을 것 같습니다. 실제로, 이진수 10000 에서 1 을 빼면 01111 , 즉, 1111 이 되기 때문입니다.

 

질문 3) 강의 커리큘럼 질문
: 만약, 말씀하신 내용이 컴퓨터가 숫자를 표현하는 원리에 대해서 비트 단위로 확인하는 것이라면, 현재 수강하시고 계시는 섹션에서 학습하시게 됩니다.

3.11 부동소수점형 강의에서는 부동소수점형이 숫자를 표현하는 원리에 대해서 비트 단위의 관점에서 학습하시게 됩니다.
또한, 추후 섹션 15 비트 다루기 에서 비트를 제어하고 조작하는 다양한 방법과 원리들에 대해서 추가적으로 학습하시게 됩니다.
하지만, 기본적인 숫자 해석과 자료형에 대해서는 현재 수강하고 계시는 섹션에서 대부분 학습하십니다.

또한, 이러한 처리 과정은 기본적으로 C언어 뿐만 아니라, 보통 대부분의 프로그래밍 언어에서 유사합니다. 보다 높은 수준의 언어에서는 해당 처리가 더 추상화되어있고, 내부적인 세부 사항이 사용자로부터 숨겨져 있는 것으로 이해하시는 것이 적절한 것 같습니다.

다만, C언어에서는 상대적으로 낮은 수준의 메모리 관리와 자료형 시스템을 가지고 있기 때문에, 다른 언어보다 더 명시적이고 세밀한 제어를 가능하게 합니다.

Export template 안됨

1

19

2

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

1

54

3

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

1

56

2

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

1

54

2

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

1

49

1

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

1

73

2

12.12 헤더 관련 질문

1

60

2

Visual Studio Community 2026 사용 문의

1

137

2

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

1

61

2

getchar(), putchar()

1

93

3

강의자리ㅛ

1

80

2

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

1

113

2

소스파일안에 여러 파일

1

75

2

F5와 F7의 차이

1

76

2

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

1

58

2

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

1

69

1

Step over 기능 문의

1

53

2

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

1

74

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

60

2

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

1

62

2

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

1

65

2

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

1

53

2

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

1

53

2