inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

4.10 scanf() 함수의 사용법

변수에 값을 할당하기 전에 컴퓨터는 어떻게 계산을 하나요?

246

당황한 청어

작성한 질문수 4

2

    char ch;
    scanf("%hhd", &ch);
    printf("%i"ch);
Overflow에 관한 질문이 있습니다.
char 데이터는 -128 ~ 127까지 값을 사용할 수 있습니다. 이때
128 값을 할당하면 -128로 overflow
129 값을 할당하면 -127로 overflow
130 값을 할당하면 -126로 overflow가 됨이 신기했습니다.
 
왜냐하면 overflow된 값을 보간법으로 처리하는 방법을 모르기 때문에 출력값을 기준으로 컴퓨터가 어떻게 동작하고 있는지 추측해봐야 했습니다.
 
binary 계산으로 보면 컴퓨터는 단순히 1을 계속하여 더하고 있을 뿐입니다.
 
부호| 값
0 | 111 1111 = 127 <= 127
1 | 000 0000 = -128 <= 128
1 | 000 0001 = -127 <= 129
1 | 000 0010 = -126 <= 130
 
질문입니다.
1) 그렇다면 컴퓨터가 int 타입의 16이란 숫자를 저장할 때도
0부터 계속해서 1을 더하여 16을 구하는 건가요? 컴퓨터가 데이터를 저장하기 전 계산하는 과정이 궁금해졌습니다!
 
2) int 타입은 그렇다고하면 float나 double같은 경우는 exponent와 fraction이 각각 나누어져 있기 때문에 실제 값을 계산하고 할당할 때 상당히 복잡한 과정이 있을 것 같습니다. 교수님이 알려주셔서 각 파트를 어떻게 계산하는지는 알고 있으나 컴퓨터가 이 과정을 어떻게 계산하고 처리하는지는 막상 상상이 되지 않습니다.
 
c 언어가 상당히 저수준의 언어라고 생각해서 배우면 컴퓨터를 잘 이해할 수 있을 거 같았는데 뭔가 더 깊은게 많을 거 같네요 ㅠㅠ 도와주세여

c

답변 1

1

홍정모

안녕하세요? 좋은 질문입니다. 사람이 나열한 기호들(1과 6이라는 기호 2개)이 데이터(정수 연산이 가능한 16이라는 데이터가 2진수의 형태로 메모리에 저장)로 어떻게 변환이 되는지 궁금하신 것 같네요. 컴파일러가 해주는 일인데 1씩 세는 것 보다는 더 효율적인 방법으로 처리합니다. 더 정확히는 C언어 '컴파일러'의 코드를 봐야할 것 같은데 제가 컴파일러 전공은 아니라서 볼 생각을 안해봤네요.

다르지만 비슷한 사례로는 C언어에서 사람이 입력한 16을 숫자 16으로 변환하는 코드는 제가 찾아봤는데 아래에서 참고하실 수 있습니다. 

https://code.woboq.org/userspace/glibc/stdlib/strtol_l.c.html

문자열을 숫자로 변환하기, 비트연산자 등은 뒤에 나오니 그때 공부하시면 됩니다.

 

 

Export template 안됨

1

45

2

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

1

68

3

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

1

63

2

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

1

61

2

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

1

58

1

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

1

80

2

12.12 헤더 관련 질문

1

63

2

Visual Studio Community 2026 사용 문의

1

147

2

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

1

65

2

getchar(), putchar()

1

96

3

강의자리ㅛ

1

84

2

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

1

119

2

소스파일안에 여러 파일

1

80

2

F5와 F7의 차이

1

82

2

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

1

63

2

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

1

72

1

Step over 기능 문의

1

56

2

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

1

81

2

int main 함수 관련 오류 문의

1

71

2

13.4 words[0]

0

64

2

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

1

65

2

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

1

67

2

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

1

57

2

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

1

56

2