c언어

c언어. 문자 자료형 사용하기

코코팡 2021. 7. 15. 16:43

c언어에서는 char를 이용하여 문자나 문자열을 저장할 수 있고 char의 크기 및 범위는

char
signed char
1바이트, 8비트 -128~127 문자 저장
unsigned char 1바이트, 8비트 0~255 바이트 단위 데이터 저장

그리고 char는 문자 자체를 저장하는 것이 아닌 그 문자의 해당하는 정수 값을 저장한다. 그러면 그 문자의 정수 값을 어떻게 알 수 있을까? 그것은 아스키(ASCII) 코드를 이용하여 알 수 있다.

32 0x20 공백(space) 64 0x40 @ 96 0x60 `
33 0x21 ! 65 0x41 A 97 0x61 a
34 0x22 " 66 0x42 B 98 0x62 b
35 0x23 # 67 0x43 C 99 0x63 c
36 0x24 $ 68 0x44 D 100 0x64 d
37 0x25 % 69 0x45 E 101 0x65 e
38 0x26 & 70 0x46 F 102 0x66 f
39 0x27 ' 71 0x47 G 103 0x67 g
40 0x28 ( 72 0x48 H 104 0x68 h
41 0x29 ) 73 0x49 I 105 0x69 i
42 0x2A * 74 0x4A J 106 0x6A j
43 0x2B + 75 0x4B K 107 0x6B k
44 0x2C , 76 0x4C L 108 0x6C l
45 0x2D - 77 0x4D M 109 0x6D m
46 0x2E . 78 0x4E N 110 0x6E n
47 0x2F / 79 0x4F O 111 0x6F o
48 0x30 0 80 0x50 P 112 0x70 p
49 0x31 1 81 0x51 Q 113 0x71 q
50 0x32 2 82 0x52 R 114 0x72 r
51 0x33 3 83 0x53 S 115 0x73 s
52 0x34 4 84 0x54 T 116 0x74 t
53 0x35 5 85 0x55 U 117 0x75 u
54 0x36 6 86 0x56 V 118 0x76 v
55 0x37 7 87 0x57 W 119 0x77 w
56 0x38 8 88 0x58 X 120 0x78 x
57 0x39 9 89 0x59 Y 121 0x79 y
58 0x3A : 90 0x5A Z 122 0x7A z
59 0x3B ; 91 0x5B [ 123 0x7B {
60 0x3C 92 0x5C \ 124 0x7C |
61 0x3D = 93 0x5D ] 125 0x7D }
62 0x3E 94 0x5E ^ 126 0x7E ~
63 0x3F ? 95 0x5F _      

이 표에서 중요한건 65~90까지는 A~Z 97~122까지는 a~z이라는 것만 숙지하면 된다. 다른 표는 필요할 때마다 찾아서 쓰면 된다.

위에 코드를 보면 작은 따옴표 (' ')를 이용하여 char에 문자를 할당하는데 char에는 작은따옴표를 쓸 시 하나의 문자만 저장 가능하며 큰 따옴표 (" ") 이용하면 두개이상의 문자 즉 문자열을 저장할 수 있다.

 더 나아가 c언어에서는 문자를 정숫값으로 저장을 하며 한 문자당 1바이트 값을 지니고 있는데 이를 이용하여 정수형 자료형에 바이트 값을 저장할 수 있는데 unsigned short name2 에 'ab'를 할당하고 크기를 출력하면 2를 출력하게 된다. (unsigned를 붙여준 이유는 문자는 부호가 없으므로 이를 명확하게 하기 위해 붙였다.)

 그래서 이렇게 바이트 크기를 나타낼때는 작은따옴표 안에 두 개 이상의 문자를 넣을 수 있다. (short의 바이트 최대 크기는 2이다.)

char name3 은 'ab'를 할당 했는데 b만 나온 이유는 일단 char형은 1바이트로 작은따옴표로는 하나의 문자만 묶을 수 있기에 앞에 a는 잘리고 뒤에 b만 출력이 된다.

 

[문자 변수 선언방법]

c1은 문자 0을 할당한 것이며 c2는 숫자 0을 할당했다. 이에 대한 출력 값은 어떻게 될 것인가?

먼저 c1은 서식지정자 %c로 출력을 하면 문자 0을 출력하고 서식지정자%d를 할 경우 아스키코드에 있는 문자 0에 해당하는 48이라는 정숫값을 출력한다.

c2는 %c를 사용할 경우 이스키 코드에서 0은 Null를 의미하기에 아무것도 출력하지 않으며 %d로 출력하면 숫자 그대로인 0을 출력한다.

 

16진수로 표현하는 방법도 알아보자.

먼저 c1에 0x61라는 16진수 표현법으로 할당을 하였다. 먼저 0x61은 아스키코드로는 a에 해당하며 고로 출력 값은

순서대로 a 97 0x61 이 출력이 되었다. 16진수로 출력하기 위한 서식지정자는 0x%x이지만 사실 %x로도 출력이 가능하다 하지만 다른 숫자를 할당할 경우 10진수와 헷갈리고 모호한 경우가 있어 0x%x의 서식지정자를 사용하는 것이다.

 

더 나아가 문자로 연산이 가능하다

 

위와 같이 c1은 97 아스키코드 표에선 a를 뜻하고 c2는 'b' 정숫값은 98이다. 이를 출력할 때 1씩 더해주면 출력 값은

정숫값은 +1 이 되었으며 문자는 다음 순번의 아스키코드표의 문자가 출력이 된다.

[제어 문자 사용하기]

 

10진수 16진수 문자 표기법 설명
10 0x0A LF \n 개행, 라인 피드(Line Feed), 새 줄(new line), 줄바꿈
13 0x0D CR \r 복귀, 캐리지 리턴(Carriage Return), 줄의 끝에서 시작 위치로 되돌아감
9 0x09 TAB \t 수평 탭(horizontal tab)

위의 표를 이용하여 사용자가 상황에 맞게 쓰면 된다.

쓰는 방법은 두 가지가 있는데 

 

위와 같이 \n를 직접 할당하여 쓰는 방식과 

printf 안에서 \n를 직접 쓰는 두가지 방식이 있다. 보통은 2번째 방식을 쓰며 1번째 방식은 제어 문자의 정숫값과 아스키코드값을 알아내기 위해 쓰인다.

'c언어' 카테고리의 다른 글

c언어. 실수 자료형 사용하기  (0) 2021.07.15
C언어. 정수 자료형 사용하기  (0) 2021.07.13
C언어. 변수 만들기  (0) 2021.07.07