자료형 char 를 공부하다가 따옴표가 갑자기 너무 헷갈려서 정리한다.


char i = '0' ;


printf("%c %d \n", i, i);


위와 같이 char 형 변수 i 에 '0' 을 넣으면 과연 i 에는 무엇이 대입된 것일까? 따옴표를 이용해서 변수에 대입한 후 적당한 서식자를 이용하여 출력하여 보니 그대로 따옴표에 넣었던 결과가 나오므로 단순하게 0 이 그대로 i 에 대입된 것일까? 


그렇다면 위와 같은 printf 구문은 결과가 어떻게 출력될지 예상해보자. 아마 앞에 %c 는 그냥 0 으로 출력되는 것을 당연하게 생각하고 실제로도 맞다. 그렇다면 뒤에 %d 는 무슨값이 나올까? 답은 48 이 출력된다. 이 48은 어디서 나온것인가 하면 바로 아스키 코드에서 나온 것이다. 아래 표에 보면 0은 아스키 코드 값으로 48이다.


DEC

HEX

OCT

Char

 

DEC

HEX

OCT

Char

 

DEC

HEX

OCT

Char

0

00

000

Ctrl-@ NUL

43

2B

053

+

86

56

126

V

1

01

001

Ctrl-A SOH

44

2C

054

,

87

57

127

W

2

02

002

Ctrl-B STX

45

2D

055

-

88

58

130

X

3

03

003

Ctrl-C ETX

46

2E

056

.

89

59

131

Y

4

04

004

Ctrl-D EOT

47

2F

057

/

90

5A

132

Z

5

05

005

Ctrl-E ENQ

48

30

060

0

91

5B

133

[

6

06

006

Ctrl-F ACK

49

31

061

1

92

5C

134

\

7

07

007

Ctrl-G BEL

50

32

062

2

93

5D

135

]

8

08

010

Ctrl-H BS

51

33

063

3

94

5E

136

^

9

09

011

Ctrl-I HT

52

34

064

4

95

5F

137

_

10

0A

012

Ctrl-J LF

53

35

065

5

96

60

140

`

11

0B

013

Ctrl-K VT

54

36

066

6

97

61

141

a

12

0C

014

Ctrl-L FF

55

37

067

7

98

62

142

b

13

0D

015

Ctrl-M CR

56

38

070

8

99

63

143

c

14

0E

016

Ctrl-N SO

57

39

071

9

100

64

144

d

15

0F

017

Ctrl-O SI

58

3A

072

:

101

65

145

e

16

10

020

Ctrl-P DLE

59

3B

073

;

102

66

146

f

17

11

021

Ctrl-Q DCI

60

3C

074

<

103

67

147

g

18

12

022

Ctrl-R DC2

61

3D

075

=

104

68

150

h

19

13

023

Ctrl-S DC3

62

3E

076

>

105

69

151

i

20

14

024

Ctrl-T DC4

63

3F

077

?

106

6A

152

j

21

15

025

Ctrl-U NAK

64

40

100

@

107

6B

153

k

22

16

026

Ctrl-V SYN

65

41

101

A

108

6C

154

l

23

17

027

Ctrl-W ETB

66

42

102

B

109

6D

155

m

24

18

030

Ctrl-X CAN

67

43

103

C

110

6E

156

n

25

19

031

Ctrl-Y EM

68

44

104

D

111

6F

157

o

26

1A

032

Ctrl-Z SUB

69

45

105

E

112

70

160

p

27

1B

033

Ctrl-[ ESC

70

46

106

F

113

71

161

q

28

1C

034

Ctrl-\ FS

71

47

107

G

114

72

162

r

29

1D

035

Ctrl-] GS

72

48

110

H

115

73

163

s

30

1E

036

Ctrl-^ RS

73

49

111

I

116

74

164

t

31

1F

037

Ctrl_ US

74

4A

112

J

117

75

165

u

32

20

040

Space

75

4B

113

K

118

76

166

v

33

21

041

!

76

4C

114

L

119

77

167

w

34

22

042

"

77

4D

115

M

120

78

170

x

35

23

043

#

78

4E

116

N

121

79

171

y

36

24

044

$

79

4F

117

O

122

7A

172

z

37

25

045

%

80

50

120

P

123

7B

173

{

38

26

046

&

81

51

121

Q

124

7C

174

|

39

27

047

'

82

52

122

R

125

7D

175

}

40

28

050

(

83

53

123

S

126

7E

176

~

41

29

051

)

84

54

124

T

127

7F

177

DEL

42

2A

052

*

85

55

125

U

맨 위로

(출처 : http://www.powerindex.net/U_convt/ascii/ascii.htm)

 

이 예제를 통해서 조금만 생각해보면 따옴표를 통해서 변수에 데이터를 저장한다면 그 값은 아스키코드로 변환된 후 대입된 다는 것을 알수 있다. 그리고 한가지 더 추가로 말하면 서식자 %c 는 아스키코드값을 그에 대응하는 값으로 보여주는 역할을 한다.

- 큰따옴표(문자열같은 것들) 또는 작은따옴표를 사용하면 따옴표 안의 데이터는 아스키코드값으로 전환된 후 그 다음 작업을 진행한다. 만일 따옴표가 없다면 그것은 그 자체로 아스키 코드인 것이다.


아래 예제를 위 아스키코드 표와 함께 보면서 결과를 한번 예상해 보시길. 처음할 때 저는 엄청 헷갈렸는데..


  printf("%d %d \n", '0', 0);

printf("%c %c \n", '0', 0);




'Language > C언어' 카테고리의 다른 글

C언어의 메모리 구조  (0) 2015.06.06
선언(declaration)과 정의(definition)의 차이  (0) 2013.11.08
반복문 for 의 함정  (1) 2013.10.23
강제 형 변환  (0) 2013.10.23
컴파일과 링크의 차이  (0) 2013.10.23
Posted by 나무길 :