문자, 문자열, ASCII code (확장 아스키)
#include <stdio.h>
int main()
{
char A;
A='A';
printf("%d\n",A); // A의 아스키 코드 번호 출력
A='z';
printf("%d\n",A);
A=' ';
printf("%d\n",A);
A='/';
printf("%d\n",A);
A='\\';
printf("%d\n",A);
A='6';
printf("%d\n",A);
A=';';
printf("%d\n",A);
return 0;
}
→ 여기서 백슬래쉬(\-원화사인)를 작은따옴표 안에 두 번 적은 이유는 \가 뒤의 것을 해석하지 말라는 뜻이 있어 컴퓨터의 입장에서는 A="\";가 A=";로 인식되어 에러가 발생하게 된다. 따라서 A="\\";라고 하면 앞의 \가 뒤의 \의 해석을 막으므로 컴퓨터는 A="\"로 받아들이게 된다.
ASCII CODE (아스키코드) - American standard code for information interchange
정보 교환용 미국 표준 부호. 아스키는 문자, 숫자, 구두점 및 기타 일부 특수 문자에 수치(numeric value)를 부여하는 부호 체계로서, 1962년 미국표준협회(ANSI)가 제정했다. 1967년 국제표준화기구(ISO) 가 ISO 646으로 제정한 7비트 정보 교환용 부호도 이를 준거한 것이다. 각 문자에 사용되는 수치를 표준화함으로써 아스키는 컴퓨터 및 프로그램이 정보를 교환할 수 있게 한다. 아스키는 모두 256개의 부호를 각각 128개로 이루어진 2개의 집합, 즉 표준 집합과 확장 집합으로 구분하여 제공한다. 표준 아스키 부호 집합에서는 각 부호에 7비트를 사용하여 0부터 127(16진수 00H부터 7FH)까지 128개 문자 부호를 제공한다. 확장 아스키 부호 집합에서는 각 부호에 8비트를 사용하여 128부터 255(16진수 80H부터 FFH)까지 128개 문자 부호를 추가로 제공한다. 표준 아스키 부호 집합 128개 중에서 0부터 32까지의 부호는 후진 문자(BS), 나르게 되돌림 문자, 탭 문자와 같은 비인쇄 문자, 즉 컴퓨터와 컴퓨터 간의 정보 전송 또는 컴퓨터와 인쇄기 간의 정보 전송을 제어하는 데 사용되는 제어 문자에 할당되어 있다. 나머지 96개 부호는 로마자의 대문자와 소문자, 0부터 9까지의 숫자 및 널리 사용되는 구두점 등 특수 기호에 할당되어 있다. 그리고 128부터 255까지의 확장 아스키 부호 집합은 컴퓨터 생산자와 소프트웨어 개발자가 여러 가지 다양한 문자에 할당할 수 있도록 하고 있다. 이렇게 할당된 확장 부호는 표준 아스키 부호와 같이 서로 다른 프로그램이나 컴퓨터 사이에서 교환되지 못한다. 예를 들면, IBM은 보통 IBM 확장 문자 집합(IBM Extended Character Set)이라고 불리는 일종의 확장 아스키 부호 집합을 자사의 PC용으로 사용하고, 애플 컴퓨터 회사는 이와 비슷한 다른 확장 아스키 문자 집합을 매킨토시용으로 사용하고 있다. 그러므로 표준 아스키 부호 집합은 마이크로컴퓨터 하드웨어 및 소프트웨어 사이에서 세계적으로 통용되는 데 비해, 확장 아스키 부호 집합은 프로그램이나 컴퓨터 또는 인쇄기가 그것을 해독할 수 있도록 설계되어 있어야만 올바로 해독될 수 있다.
기능에 따라 문자를 구분하자면 크게 두 가지로 분류할 수 있다.
1. 제어문자(Control Character) : 제어문자는 통신, 서식, 특수제어 및 정보 분리 등의 기능을 하는 문자.
2. 그래픽 문자(Graphic Character) : 일반적으로 알고 있는 숫자와 알파벳. (0~9, a~z, A~Z)
10진수 |
16진수 |
8진수 |
2진수 |
ASCII |
10진수 |
16진수 |
8진수 |
2진수 |
ASCII |
0 |
0×00 |
000 |
0000000 |
NULL |
64 |
0×40 |
100 |
1000000 |
@ |
1 |
0×01 |
001 |
0000001 |
SOH |
65 |
0×41 |
101 |
1000001 |
A |
2 |
0×02 |
002 |
0000010 |
STX |
66 |
0×42 |
102 |
1000010 |
B |
3 |
0×03 |
003 |
0000011 |
ETX |
67 |
0×43 |
103 |
1000011 |
C |
4 |
0×04 |
004 |
0000100 |
EOT |
68 |
0×44 |
104 |
1000100 |
D |
5 |
0×05 |
005 |
0000101 |
ENQ |
69 |
0×45 |
105 |
1000101 |
E |
6 |
0×06 |
006 |
0000110 |
ACK |
70 |
0×46 |
106 |
1000110 |
F |
7 |
0×07 |
007 |
0000111 |
BEL |
71 |
0×47 |
107 |
1000111 |
G |
8 |
0×08 |
010 |
0001000 |
BS |
72 |
0×48 |
110 |
1001000 |
H |
9 |
0×09 |
011 |
0001001 |
HT |
73 |
0×49 |
111 |
1001001 |
I |
10 |
0×0A |
012 |
0001010 |
LF |
74 |
0×4A |
112 |
1001010 |
J |
11 |
0×0B |
013 |
0001011 |
VT |
75 |
0×4B |
113 |
1001011 |
K |
12 |
0×0C |
014 |
0001100 |
FF |
76 |
0×4C |
114 |
1001100 |
L |
13 |
0×0D |
015 |
0001101 |
CR |
77 |
0×4D |
115 |
1001101 |
M |
14 |
0×0E |
016 |
0001110 |
SO |
78 |
0×4E |
116 |
1001110 |
N |
15 |
0×0F |
017 |
0001111 |
SI |
79 |
0×4F |
117 |
1001111 |
O |
16 |
0×10 |
020 |
0010000 |
DLE |
80 |
0×50 |
120 |
1010000 |
P |
17 |
0×11 |
021 |
0010001 |
DC1 |
81 |
0×51 |
121 |
1010001 |
Q |
18 |
0×12 |
022 |
0010010 |
SC2 |
82 |
0×52 |
122 |
1010010 |
R |
19 |
0×13 |
023 |
0010011 |
SC3 |
83 |
0×53 |
123 |
1010011 |
S |
20 |
0×14 |
024 |
0010100 |
SC4 |
84 |
0×54 |
124 |
1010100 |
T |
21 |
0×15 |
025 |
0010101 |
NAK |
85 |
0×55 |
125 |
1010101 |
U |
22 |
0×16 |
026 |
0010110 |
SYN |
86 |
0×56 |
126 |
1010110 |
V |
23 |
0×17 |
027 |
0010111 |
ETB |
87 |
0×57 |
127 |
1010111 |
W |
24 |
0×18 |
030 |
0011000 |
CAN |
88 |
0×58 |
130 |
1011000 |
X |
25 |
0×19 |
031 |
0011001 |
EM |
89 |
0×59 |
131 |
1011001 |
Y |
26 |
0×1A |
032 |
0011010 |
SUB |
90 |
0×5A |
132 |
1011010 |
Z |
27 |
0×1B |
033 |
0011011 |
ESC |
91 |
0×5B |
133 |
1011011 |
[ |
28 |
0×1C |
034 |
0011100 |
FS |
92 |
0×5C |
134 |
1011100 |
\ |
29 |
0×1D |
035 |
0011101 |
GS |
93 |
0×5D |
135 |
1011101 |
] |
30 |
0×1E |
036 |
0011110 |
RS |
94 |
0×5E |
136 |
1011110 |
^ |
31 |
0×1F |
037 |
0011111 |
US |
95 |
0×5F |
137 |
1011111 |
_ |
32 |
0×20 |
040 |
0100000 |
SP |
96 |
0×60 |
140 |
1100000 |
. |
33 |
0×21 |
041 |
0100001 |
! |
97 |
0×61 |
141 |
1100001 |
a |
34 |
0×22 |
042 |
0100010 |
" |
98 |
0×62 |
142 |
1100010 |
b |
35 |
0×23 |
043 |
0100011 |
# |
99 |
0×63 |
143 |
1100011 |
c |
36 |
0×24 |
044 |
0100100 |
$ |
100 |
0×64 |
144 |
1100100 |
d |
37 |
0×25 |
045 |
0100101 |
% |
101 |
0×65 |
145 |
1100101 |
e |
38 |
0×26 |
046 |
0100110 |
& |
102 |
0×66 |
146 |
1100110 |
f |
39 |
0×27 |
047 |
0100111 |
' |
103 |
0×67 |
147 |
1100111 |
g |
40 |
0×28 |
050 |
0101000 |
( |
104 |
0×68 |
150 |
1101000 |
h |
41 |
0×29 |
051 |
0101001 |
) |
105 |
0×69 |
151 |
1101001 |
i |
42 |
0×2A |
052 |
0101010 |
* |
106 |
0×6A |
152 |
1101010 |
j |
43 |
0×2B |
053 |
0101011 |
+ |
107 |
0×6B |
153 |
1101011 |
k |
44 |
0×2C |
054 |
0101100 |
' |
108 |
0×6C |
154 |
1101100 |
l |
45 |
0×2D |
055 |
0101101 |
- |
109 |
0×6D |
155 |
1101101 |
m |
46 |
0×2E |
056 |
0101110 |
. |
110 |
0×6E |
156 |
1101110 |
n |
47 |
0×2F |
057 |
0101111 |
/ |
111 |
0×6F |
157 |
1101111 |
o |
48 |
0×30 |
060 |
0110000 |
0 |
112 |
0×70 |
160 |
1110000 |
p |
49 |
0×31 |
061 |
0110001 |
1 |
113 |
0×71 |
161 |
1110001 |
q |
50 |
0×32 |
062 |
0110010 |
2 |
114 |
0×72 |
162 |
1110010 |
r |
51 |
0×33 |
063 |
0110011 |
3 |
115 |
0×73 |
163 |
1110011 |
s |
52 |
0×34 |
064 |
0110100 |
4 |
116 |
0×74 |
164 |
1110100 |
t |
53 |
0×35 |
065 |
0110101 |
5 |
117 |
0×75 |
165 |
1110101 |
u |
54 |
0×36 |
066 |
0110110 |
6 |
118 |
0×76 |
166 |
1110110 |
v |
55 |
0×37 |
067 |
0110111 |
7 |
119 |
0×77 |
167 |
1110111 |
w |
56 |
0×38 |
070 |
0111000 |
8 |
120 |
0×78 |
170 |
1111000 |
x |
57 |
0×39 |
071 |
0111001 |
9 |
121 |
0×79 |
171 |
1111001 |
y |
58 |
0×3A |
072 |
0111010 |
: |
122 |
0×7A |
172 |
1111010 |
z |
59 |
0×3B |
073 |
0111011 |
; |
123 |
0×7B |
173 |
1111011 |
{ |
60 |
0×3C |
074 |
0111100 |
< |
124 |
0×7C |
174 |
1111100 |
| |
61 |
0×3D |
075 |
0111101 |
= |
125 |
0×7D |
175 |
1111101 |
} |
62 |
0×3E |
076 |
0111110 |
> |
126 |
0×7E |
176 |
1111110 |
~ |
63 |
0×3F |
077 |
0111111 |
? |
127 |
0×7F |
177 |
1111111 |
DEL |
확장형
- 아스키코드에는 영문과 숫자만을 넣을 수 있는 한계가 있기에, 유니코드를 만들어서 한글, 일어, 한자 등을 넣을 수 있도록 했다. 아스키코드는 1byte(8bit->2의8제곱=256)지만 유니코드는 2byte(16bit->2의 16제곱=65536)를 차지한다.
ex)
#include<stdio.h>
int main()
{
printf("%c%c%c%c%c\n",72,101,108,108,111);
return 0;
}
//문자열을 화면에 출력하는 프로그램
#include <stdio.h>
int main()
{
char word[30]; //문자열의 배열 선언
short A[30];
int B[30];
printf("Please enter anything: ");
scanf("%s", word);
printf("%s, this is what you type.\n", word);
printf("%d\n",sizeof(word));
printf("%d\n",sizeof(A));
printf("%d\n",sizeof(B));
return 0;
}
→ scanf("%s", word);// %s는 string(문자열)의 뜻이며 문자열의 경우는 %s가 저장되는 변수 word 앞에 &가 생략되었다.(문자열을 제외하면 반드시 &를 넣어야 한다.)
→ char word[30] 배열은 30byte의 메모리를 차지하고
short A[30] 배열은 60byte의 메모리를 차지하며
int B[30] 배열은 120byte의 메모리를 차지한다.
[참고]
ASCII CODE (http://blog.naver.com/vletzrockv?Redirect=Log&logNo=130010010849)
ASCII 표 (http://www.jasko.co.kr/lesson/ascii.html)
확장형 ASCII 표 (http://blog.naver.com/leons78?Redirect=Log&logNo=130001992806)
'내장형 하드웨어 > C언어' 카테고리의 다른 글
부가 연산자, 복합 부가 연산자, printf, scanf, 제어문 (0) | 2011.04.04 |
---|---|
C 언어의 연산자 - 산술, 비교, 논리 연산자 (0) | 2011.04.04 |
if문, 다중 if문, switch 문, 흐름도 (flow chart) (0) | 2011.04.04 |
부가 연산자, 복합 부가 연산자, printf, scanf, 제어문 (0) | 2011.04.01 |
C 언어의 연산자 - 산술, 비교, 논리 연산자 (0) | 2011.03.31 |