티스토리 뷰



주기억 장치에서의 데이터 처리의 최소 단위는 바이트입니다. 물론 기억소자나 통신 과정에서는 비트 단위까지 다루어지 지지만 사람이 인지하는 대부분의 데이터 표현은 바이트 단위가 기본입니다. 그런데 메모리에 저장한 데이터를 어떻게 해석하는지에 따라 데이터는 단순 바이너리 값으로 숫자나 이미지 데이터를 표현하는 정보일 수도 있고, 십진수를 저장하는 값일 수도 있으며(BCD), 영문자, 숫자, 특수문자를 표현할 수도 있습니다(EBCDIC, ASCII). 한 바이트가 아닌 둘 이상의 바이트를 가지고 고정 소숫점을 표현하는 이진값을 나타낼 수도 있고, 더 큰 범위의 수를 표현하기 위한 부동 소숫점을 표현할 수도 있을 뿐만아니라 한국어(CP949, EUC-KR, UTF-8)와 같은 다양한 언어를 표현할 수도 있습니다. 메모리에 저장되어 있는 동일한 데이터를 가지고 숫자, 이미지, 음성, 문자등 다양한 정보로 해석(디코딩, Decoding) 할 수 있다는 의미입니다. 이번 글에서는 문자 표현에 촛점을 맞출까 합니다. 사람이 사용하는 문자를 코드로 만드는 과정을 코드화, 부호화, 인코딩(Encoding) 등으로 부릅니다. 웹과 모바일을 널리 사용하는 현 시점에서 "한글 인코딩"에 대한 이슈가 종종 회자되는데 한국어를 어떤 방식으로 표현했는지를 이야기하는 것입니다. 예를 들어 "한글"을 EUC-KR로 표현하면 바이너리로 0xc7 d1 b1 db 이지만 UTF-8 인코딩을 하면 0xed 95 9c ea b8 80 입니다. 바이트 크기도 다르고 실제 표현 값도 다르기 때문에 인코딩을 모르고 작업을 하면 낭패를 볼 수 밖에 없습니다.


■ BCD(Binary-Coded Decima)

BCD 코드는 "이진화 십진법"이라는 말 그대로 십진수를 간편하게 표현하기 위해서 2진수 4비트를 사용하는 방법입니다. 1 바이트로는 십진수 두자리를 표현하는 방법입니다. 

1024(10) --> 0001 0000 0010 0100(2)

10진수 1024를 표현하려면 위의 예와 같이 2바이트가 필요합니다. 0~9를 이진수 8421 자리 값 그대로 사용하기 때문에 8421코드라고도 합니다.

그런데, IBM사에서는 이 BCD코드를 문자 표현에도 사용했는데 4비트 BCD코드 앞에 2비트의 존(Zone) 영역을 부가하는 방법을 초기 IBM 시스템에 사용하다가 EBCDIC 코드로 대체했습니다. 6비트이므로 최대 64개의 문자를 표현할 수 있었습니다. 존 영역은 아래와 같이 구분했었습니다.

    • 00 : 0~9 숫자 표현

    • 11 : A~I 문자 표현

    • 10 : J~R 문자 표현

    • 01 : S~Z 문자 표현


■ EBCDIC(Extended Binary Coded Decimal Interchange Code)

"확장 이진화 십진법 교환 부호"는 앞서 언급한 6비트 BCD 인코딩을 확장한 코드로 통상 "엡시딕"으로 읽습니다. 은행등에서 사용하는 IBM 대형 컴퓨터에서는 여전히 사용하는 코드 체계입니다. 6비트 BCD는 존 영역이 2비트였지만 EBCDIC에서는 4비트 존을 사용해서 8비트 코드 체계를 갖습니다. 존 영역을 통해서 숫자, 대문자, 소문자, 특수문자, 제어문자등을 구분하여 최대 256개의 문자를 표현합니다.

0(0) NUL 51(33) IR 102(66)   153(99) r 204(CC)  
1(1) SOH 52(34) PP 103(67)   154(9A)   205(CD)  
2(2) STX 53(35) TRN 104(68)   155(9B)   206(CE)  
3(3) ETX 54(36) NBS 105(69)   156(9C)   207(CF)  
4(4) SEL 55(37) EOT 106(6A) | 157(9D)   208(D0) }
5(5) HT 56(38) SBS 107(6B) , 158(9E)   209(D1) J
6(6) RNL 57(39) IT 108(6C) % 159(9F)   210(D2) K
7(7) DEL 58(3A) RFF 109(6D) _ 160(A0)   211(D3) L
8(8) GE 59(3B) CU3 110(6E) > 161(A1) ~ 212(D4) M
9(9) SPS 60(3C) DC4 111(6F) ? 162(A2) s 213(D5) N
10(0A) RPT 61(3D) NAK 112(70)   163(A3) t 214(D6) O
11(0B) VT 62(3E)   113(71)   164(A4) u 215(D7) P
12(0C) FF 63(3F) SUB 114(72)   165(A5) v 216(D8) Q
13(0D) CR 64(40) SP 115(73)   166(A6) w 217(D9) R
14(0E) SO 65(41)   116(74)   167(A7) x 218(DA)  
15(0F) SI 66(42)   117(75)   168(A8) y 219(DB)  
16(10) DLE 67(43)   118(76)   169(A9) z 220(DC)  
17(11) DC1 68(44)   119(77)   170(AA)   221(DD)  
18(12) DC2 69(45)   120(78)   171(AB)   222(DE)  
19(13) DC3 70(46)   121(79) ˋ 172(AC)   223(DF)  
20(14) RES/ENP 71(47)   122(7A) : 173(AD)   224(E0) \
21(15) NL 72(48)   123(7B) # 174(AE)   225(E1)  
22(16) BS 73(49)   124(7C) @ 175(AF)   226(E2) S
23(17) POC 74(4A) ¢ 125(7D) ' 176(B0)   227(E3) T
24(18) CAN 75(4B) . 126(7E) = 177(B1)   228(E4) U
25(19) EM 76(4C) < 127(7F) " 178(B2)   229(E5) V
26(1A) UBS 77(4D) ( 128(80)   179(B3)   230(E6) W
27(1B) CU1 78(4E) + 129(81) a 180(B4)   231(E7) X
28(1C) IFS 79(4F) | 130(82) b 181(B5)   232(E8) Y
29(1D) IGS 80(50) & 131(83) c 182(B6)   233(E9) Z
30(1E) IRS 81(51)   132(84) d 183(B7)   234(EA)  
31(1F) IUS/ITB 82(52)   133(85) e 184(B8)   235(EB)  
32(20) DS 83(53)   134(86) f 185(B9)   236(EC)  
33(21) SOS 84(54)   135(87) g 186(BA)   237(ED)  
34(22) FS 85(55)   136(88) h 187(BB)   238(EE)  
35(23) WUS 86(56)   137(89) i 188(BC)   239(EF)  
36(24) BYP/INP 87(57)   138(8A)   189(BD)   240(F0) 0
37(25) LF 88(58)   139(8B)   190(BE)   241(F1) 1
38(26) ETB 89(59)   140(8C)   191(BF)   242(F2) 2
39(27) ESC 90(5A) ! 141(8D)   192(C0) { 243(F3) 3
40(28) SA 91(5B) $ 142(8E)   193(C1) A 244(F4) 4
41(29)   92(5C) * 143(8F)   194(C2) B 245(F5) 5
42(2A) SM/SW 93(5D) ) 144(90)   195(C3) C 246(F6) 6
43(2B) CSP 94(5E) ; 145(91) j 196(C4) D 247(F7) 7
44(2C) MFA 95(5F) ¬ 146(92) k 197(C5) E 248(F8) 8
45(2D) ENQ 96(60) - 147(93) l 198(C6) F 249(F9) 9
46(2E) ACK 97(61) / 148(94) m 199(C7) G 250(FA) |
47(2F) BEL 98(62)   149(95) n 200(C8) H 251(FB)  
48(30)   99(63)   150(96) o 201(C9) I 252(FC)  
49(31)   100(64)   151(97) p 202(CA)   253(FD)  
50(32) SYN 101(65)   152(98) q 203(CB)   254(FE)  


■ ASCII(American Standard Code for Information Interchange)

"미국정보교환표준부호"라는 이름 처럼  미국 국립 표준 연구소에서 제정하여 가장 널리 사용하는 코드 체계입니다. 대부분의 문자 인코딩은 ASCII에 기반하고 있습니다. 7비트 코드 체계로 32(0x20)는 공백(Space) 문자로 32보다 작은 코드 값은 제어 문자를 나타내고 그 이후 값으로 영문자, 숫자, 특수문자 총 128개의 문자를 표현하지만 8비트로 확장하여 언어별로 특별한 문자를 할당하여  사용하는 경우가 많습니다. 한글의 경우에도 기존 아스키 코드에 더해서 첫 비트(MSB)를 켜서 한글임을 나타내고 바로 다음 바이트를 합쳐 2바이트로 조합형이나 완성형 한글을 표현하는데 사용했습니다. 다양한 언어를 소화하는 UTF-8 인코딩의 경우에도 첫 비트(MSB)가 꺼져 있으면 1바이트의 아스키 코드와 동일하지만 첫 비트(MSB)가 켜지면 2~4바이트의 가변 길이를 갖는 코드로 인코딩 합니다.

0(0) NUL 50(32) 2 100(64) d
1(1) SOH 51(33) 3 101(65) e
2(2) STX 52(34) 4 102(66) f
3(3) ETX 53(35) 5 103(67) g
4(4) EOT 54(36) 6 104(68) h
5(5) ENQ 55(37) 7 105(69) i
6(6) ACK 56(38) 8 106(6A) j
7(7) BEL 57(39) 9 107(6B) k
8(8) BS 58(3A) : 108(6C) l
9(9) HT 59(3B) ; 109(6D) m
10(0A) LF 60(3C) < 110(6E) n
11(0B) VT 61(3D) = 111(6F) o
12(0C) FF 62(3E) > 112(70) p
13(0D) CR 63(3F) ? 113(71) q
14(0E) SO 64(40) @ 114(72) r
15(0F) SI 65(41) A 115(73) s
16(10) DLE 66(42) B 116(74) t
17(11) DC1 67(43) C 117(75) u
18(12) DC2 68(44) D 118(76) v
19(13) DC3 69(45) E 119(77) w
20(14) DC4 70(46) F 120(78) x
21(15) NAK 71(47) G 121(79) y
22(16) SYN 72(48) H 122(7A) z
23(17) ETB 73(49) I 123(7B) {
24(18) CAN 74(4A) J 124(7C) |
25(19) EM 75(4B) K 125(7D) }
26(1A) SUB 76(4C) L 126(7E) ~
27(1B) ESC 77(4D) M 127(7F) DEL
28(1C) FS 78(4E) N 128(80)  
29(1D) GS 79(4F) O 129(81)  
30(1E) RS 80(50) P 130(82)  
31(1F) US 81(51) Q 131(83)  
32(20) SP 82(52) R 132(84)  
33(21) ! 83(53) S 133(85)  
34(22) " 84(54) T 134(86)  
35(23) # 85(55) U 135(87)  
36(24) $ 86(56) V 136(88)  
37(25) % 87(57) W 137(89)  
38(26) & 88(58) X 138(8A)  
39(27) ' 89(59) Y 139(8B)  
40(28) ( 90(5A) Z 140(8C)  
41(29) ) 91(5B) [ 141(8D)  
42(2A) * 92(5C) \ 142(8E)  
43(2B) + 93(5D) ] 143(8F)  
44(2C) , 94(5E) ^ 144(90)  
45(2D) - 95(5F) _ 145(91)  
46(2E) . 96(60) ˋ 146(92)  
47(2F) / 97(61) a 147(93)  
48(30) 0 98(62) b 148(94)  
49(31) 1 99(63) c 149(95)  


■ 그레이(Gray) 코드

숫자를 부호화(인코딩)하는 방법중의 하나로 RBC(reflected binary code)라고도 부릅니다. 연속된 숫자 사이에 하나의 비트만 바뀌도록 부호화 한 것입니다. 

십진수 이진수 그레이코드 그레이십진
0 0 0 0 0 0 0 0 0 0
1 0 0 0 1 0 0 0 1 1
2 0 0 1 0 0 0 1 1 3
3 0 0 1 1 0 0 1 0 2
4 0 1 0 0 0 1 1 0 6
5 0 1 0 1 0 1 1 1 7
6 0 1 1 0 0 1 0 1 5
7 0 1 1 1 0 1 0 0 4
8 1 0 0 0 1 1 0 0 12
9 1 0 0 1 1 1 0 1 13
10 1 0 1 0 1 1 1 1 15

위의 표를 보면 3과 4 사이의 변화를 이진수로 보면 비트 3개가 변동되지만 그레이 코드로 보면 단 한개의 비트 차이만 있습니다. 그레이 코드에서는 원래 6인 값을 4로 부호화한다는 의미입니다. 통상 연산에는 쓰이진 않고 통신 및 장치 제어에 주로 사용합니다. 


■ 3초과 부호(Excess-3 Code)

XS-3 코드로도 불리는 숫자 부호화 방법으로 BCD의 변형이며 초기 컴퓨터 시스템에서 사용된 코드입니다. BCD를 통한 숫자 표현에 +3한 값으로 숫자를 표기합니다.

즉 0은 원래 2진수는 0000이지만 3초과 부호에서는 0011입니다. 마찬가지로 9는 원래 BCD는 1001이지만 3초과 부호에서는 1100으로 표현해서 10진수 1234는 0100 0101 0110 0111로 부호화합니다. BCD와의 차이점은 이렇게 부호화하면 비트만 0-1로 뒤집으면 보수 만들기가 쉽기 때문에(자기 보수적이라 합니다) 뺄셈 연산이 간편해 집니다. 예를 들어 4의 9의 보수를 취하려면 4의 3초과 부호는 0111이고 비트를 뒤집으면 1000으로 3초과 부호로 5가 나옵니다. 3초과 부호된 두 수를 덧셈 또는 뺄셈할 경우 그냥 2진수의 덧셈 및 뺄셈을 수행한 다음에 자리올림(Carry)이 있으면 3(0011)을 더하고 자리올림이 없으면 3(0011)을 빼주면 됩니다. 3초과 부호를 보면 모든 비트가 0일 경우가 없기 때문에 통신 두절을 감지 하는데 사용할수도 있고 5이상은 첫 비트(MSB)가 켜지기 때문에 반올림에 활용하기도 합니다.


■ 오류 검출 및 정정 부호

통신 채널을 통해 데이터를 정상적으로 전달하기 위한 기술로 송신측에서 수신측으로 보낸 데이터 중에 문제가 있는 것을 찾아내는데 사용하는 것을 오류 검출 코드라 하고 발견한 오류를 찾아내 원상 복구하는 과정을 오류 정정이라 합니다.

- 패리티 비트

가장 간단한 형태의 오류 검출 부호로 데이터 중에 있는 비트가 1인 개수가 홀수(Odd)개 또는 짝수(Even) 개가 되도록 패리티 비트를 덧붙이는 방식입니다. 예를 들어 송신 및 수신측 양쪽에서 홀수 패리티를 사용하기로 했는데 데이터 중에 1인 비트의 개수가 짝수인 값이 수신 되었다면 이를 오류를 간주하여 처리한다는 것입니다. 7비트 아스키를 사용한다면 첫비트는 패리티 비트로 사용하여 7비트중에 1인 비트의 개수가 짝수인지 홀수 개인지를 판별하여 시스템에서 정한 패리티 규칙에 따라 패리티 비트를 1 또는 0으로 설정해서 전송합니다. 패리티 비트 사용방식은 오류는 검출할 수 있지만 정정 기능은 없습니다.

1010001를 짝수 패리티로 전송 한다면 11010001로 보내고 홀수 패리티로 전송한다면 01010001로 전송합니다.

- 2 out of 5 코드

1 11000
2 10100
3 10010
4 01010
5 00110
6 10001
7 01001
8 00101
9 00011
0 01100

5비트로 숫자 0~9를 부호화해서 비트 오류를 검출하는 코드입니다. 0~9를 표현하는데 있어 5비트중 1인 비트 2개 0인 비트 3개가 동일하게 있도록 위의 표와 같이 배치하는 방식입니다. 오류 검출은 가능하지만 정정은 할 수 없습니다.

- 중복 검사(Repetition)

정상적인 전송 확인을 위해서 모든 비트를 n회 반복해서 전송하는 방식입니다. 101을 n이 3인 환경으로 전송하면 111000111로 보내는 것입니다. 오류 검출후 일부 정정 가능성이 있지만 완전하지는 않은 특성이 있습니다.

- 바이퀴너리(Biquinary) 코드

0 0 1 0 0 0 0 1
1 0 1 0 0 0 1 0
2 0 1 0 0 1 0 0
3 0 1 0 1 0 0 0
4 0 1 1 0 0 0 0
5 1 0 0 0 0 0 1
6 1 0 0 0 0 1 0
7 1 0 0 0 1 0 0
8 1 0 0 1 0 0 0
9 1 0 1 0 0 0 0

2를 의미하는 Bi와 5를 의미하는 Quinary의 합성어로 총 7비트로 0~9를 부호화하는 방식입니다. 7비트중 처음 2비트는 5미만 인지(01) 5이상 인지(10)를 나타내고 나머지 5비트는 각 위치값을 나타내는 방식이므로 항상 2개의 1인 비트와 5개의 0인 비트가 존재하게 되어 전송 과정의 오류를 검출할 수 있습니다.

- 링카운터(Ring Counter) 코드

0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1 0
2 0 0 0 0 0 0 0 1 0 0
3 0 0 0 0 0 0 1 0 0 0
4 0 0 0 0 0 1 0 0 0 0
5 0 0 0 0 1 0 0 0 0 0
6 0 0 0 1 0 0 0 0 0 0
7 0 0 1 0 0 0 0 0 0 0
8 0 1 0 0 0 0 0 0 0 0
9 1 0 0 0 0 0 0 0 0 0

10비트를 사용해서 0~9를 부호화한것으로 각 값은 한개의 1만 가지는 특성으로 에러를 검출합니다.

체크섬(checksum) 및 CRC(Cyclic Redundancy Check)

중복검사의 한 형태로 데이터를 전송하기 전에 데이터의 모든 바이트를 더한 다음 특정한 비트수에 맞게 나머지를 구해 얻어진 체크섬을 데이터의 일부로 붙여서 수신측에서 같은 방식으로 계산하여 전송과정에 오류가 있는지를 찾아내는 방법입니다. CRC는 체크섬처럼 계산된 검증 코드를 덧붙인다는 점에서는 비슷하지만 검증 코드가 체크섬처럼 단순 더하기와 나머지 연산이 아니라 다항식에 따라 구해집니다. CRC-16, CRC-32, CRC-64등을 주로 사용합니다.

- 해밍 코드(Hamming code)

리처드 해밍이 제안한 오류 정정 코드로 1비트 오류는 정정도 가능하지만 2비트 오류는 검출만 가능합니다. 이 경우는 통상 해밍코드라 불리는 해밍 (7,4) 부호를 뜻하는데 4비트를 전송하기 위해서 3비트의 검사비트를 추가하여 총 7비트를 전송하는 경우를 말합니아. 아스키 7비트를 보내기 위해서 패리티 1비트를 추가해서 부호화한다면 (8, 7)로 기술할 것입니다. 패리티 비트의 개수를 m이라 하면 해밍코드의 총 비트수는 이고 표현 가능한 데이터의 비트수는 입니다. 일반적인 (7, 4) 해밍은 패리티 비트수가 3으로 통 비트수는 이고 데이터 비트수는 입니다. 패리티 비트수를 4로 하면 총 비트수는 이고 데이터 비트 수는 이므로 (15, 11) 해밍을 구성할 수 있습니다.

위의 그림은 (7, 4) 해밍과 (15, 11) 해밍의 예제입니다. 몇가지 중요 핵심을 정리해 보면

    • 패리티 비트(P1~P3, P4)는 번째 비트 위치 즉,  1, 2, 4, 8, 16, 32, 64에 차례대로 위치합니다.

    • 데이터 비트(D1~D4, D11)는 패리티 비트를 제외한 나머지 위치에 차례대로 위치합니다.

    • 각 패리티 비트는 짝수 패리티(연관 비트등을 모두 감안하여 1인 비트의 수가 짝수가 되도록 패리티 비트를 조정)

    • 각 패리티 비트는 자신의 위치를 포함하여 위의 그림처럼  개 포함 +개 제외 + 개 포함......의 방식으로 패리티 계산 및 검사 대상을 지정합니다. 예를 들어 P1은 1, 3, 5, 7, 9, 11, 13, 15.......이고 P2는 2, 3,  6, 7, 10,11, 14, 15....와 같은 방식입니다.

그림과 같이 각 데이터 비트는 최소 2개이상의 패리티 비트에 의해 오류를 검출할 수 있고 어떤 패리티에 문제가 있는지 검사해서 정정도 가능합니다. 그렇지만 2개 이상의 비트에 오류가 있다면 오류 검출은 가능하지만 정정할 수 없습니다. (7, 4) 해밍의 경우 비트 3개가 바뀌면 오류를 검출할 수 없는데 이처럼 오류를 검출하지 못하는 시점을 해밍거리(Hamming distance)라 합니다.  (7, 4) 해밍 코드의 해밍 거리는 3으로 단일오류(single error)나 이중오류(double error)는 검출할 수 있지만 정정은 단일 오류만 가능합니다. 검출 및 정정 범위를 늘이려면 패리티 비트를 추가해서 해밍 거리를 늘려주면 됩니다. 최소해밍거리가 5 또는 6이면 4개의 오류를 검출할 수 있고 2개까지의 오류는 정정할 수 있습니다. 최소해밍거리가 7이면 3개까지의 오류를 정정할 수 있습니다.


■ 한글 인코딩

"컴퓨터에서 한글을 어떻게 부호화 할 것인가?"에 대한 논의가 한창일 때가 있었습니다. 이런 고민은 8비트로 문자를 모두 표현할 수 없는 한중일을 비롯한 다양한 언어권에 해당하는 고민일 것입니다. 논의 초기 과학적인 한글의 성격을 그대로 유지하려는 조합형 한글은 이런 고민의 흔적일 것입니다.

- N바이트 조합형

한글의 자음과 모음에 영문 대문자, 소문자,특수문자등을 대입해서 한글을 풀어쓰기 방식으로 사용하므로 2~5바이트로 한글 한자를 기술하는 방식입니다. 원래의 아스키 값과 구분하기 위해서 SI(Shift In)/SO(Shift Out) 특수문자로 앞 뒤를 감싸주어야 했기 때문에 여러 모로 불편한 점이 많았습니다. 

- 3바이트 조합형

한글의 초성, 중성, 종성을 3바이트에 각각 인코딩해서 담는 방식

- 2바이트 조합형

2바이트의 첫 비트(MSB)를 켜고 나머지 비트열을 초성, 중성, 종성에 5비트씩 할당해서 부호화하는 방식으로 2바이트 완성형과 같이 사용된 기간이 있었습니다. 코드화된 값으로 한글의 초중종성을 알아낼 수 있고 한글을 작성하는 과정의 미완성 한글 표현에도 용이한 장점이 있지만 두번째 바이트의 첫 비트(MSB)가 0일 가능성도 있기 때문에 영문과 혼용하는데 제약이 있는 단점이 있습니다.


결과적으로 한글 인코딩은 마이크로소프트사의 윈도우95에서 조합형을 사용할 수 없게 되면서 2바이트 완성형 한글이 표준으로 굳어지게 되었습니다. 완성형 한글은 한글 1글자에 2바이트의 부호를 할당한 것으로 부호 값 자체로는 한글의 초성, 중성, 종성을 분석할 수 없고, 표현 불가한 글자도 존재할 수 있는 단점이 있지만 2바이트 모두의 첫비트(MSB)가 켜지기 때문에 영문과의 혼용에도 무리가 없는 등의 장점이 있습니다. 현재 한글 인코딩의 표준인 KSC 5601은 KSX 1001이며 이것을 통상 EUC-KR로 부르며 2,350자를 표현할 수 있습니다. 윈도우 95부터 적용한 마이크로소프트의 확장 완성형 한글은 CP949(코드 페이지 949, MS949, x-windows-949)라고 하는데 11,172자의 한글을 표현할 수 있습니다. 문자 표현 범위에 차이가 있기는 하지만 CP949와 EUC-KR의 내용은 같습니다. 동일한 내용에 CP949에 더 많은 한글 표현이 있다는 차이입니다.

한글 표현을 넘어서 다른 언어들까지 하나의 인코딩으로 표현하려는 시도가 유니코드이고 현재 보편적으로 채용하고 있는 인코딩 방식은 UTF-8입니다. UTF-8(Universal Coded Character Set + Transformation Format - 8)은 유니코드 인코딩 방식의 하나로 1~4바이트의 가변 길이로 표현됩니다. 일반 아스키 문자는 1바이트이고 코드값에 따라 각 바이트의 첫 비트(MSB)를 On하는 방식으로 2~4바이트로 확장하는 방식입니다. 다국어 모바일 환경이 확대되면서 점점더 UTF-8 인코딩을 채용하는 사이트가 늘어나고 있습니다. 

코드 범위 UTF-8 표현
000000-00007F 0xxxxxxx
000080-0007FF 110xxxxx 10xxxxxx
000800-00FFFF 1110xxxx 10xxxxxx 10xxxxxx
010000-10FFFF 11110zzz 10zzxxxx 10xxxxxx 10xxxxxx


위의 표에서 나타낸것처럼 UTF-8인코딩과 완성형 한글(CP949, EUC-KR)간에는 상호 변환이 가능합니다.  
1바이트로 표현되는 아스키 문자는 MSB가 0입니다. 2~4 바이트 문자는 첫 바이트의 상위 비트로 크기를 표현해서 2바이트는 110, 3바이트는 1110, 4바이트는 11110으로 시작합니다. 그리고 두번째 바이트부터는 상위 2비트를 항상 10으로 설정한다음 나머지 비트에 원래의 코드값을 배분하는 형태입니다.


 이제 기출문제를 통해서 복습해 보겠습니다. "정답보기"를 틀릭하면 답을 확인할 수 있습니다.

1. 8비트로 256문자를 나타내는 체계의 정보 코드는? (정답보기)

    가. EBCDIC 코드 나. BCD 코드

    다. Gray 코드 라. ASCII 코드


2. EBCDIC 코드의 존(Zone) 코드는 몇 비트로 구성되어 있는가? (정답보기)

가. 4 나. 7

다. 8 라. 6


3. 에러를 검출하고 검출된 에러를 교정하기 위하여 사용되는 코드는? (정답보기)

가. ASCII 코드 나. BCD 코드

다. 8421 코드 라. Hamming 코드


4. 다음 중 에러검출 코드가 아닌 것은? (정답보기)

    가. 2 out-of 5 나. Biquinary

    다. CRC 라. BCD


5. 에러를 검출하고 검출된 에러를 교정하기 위하여 사용되는 코드는? (정답보기)

가. ASCII 코드 나. BCD 코드

다. 8421 코드 라. Hamming 코드


6. 연속되는 2개의 숫자를 표현한 코드에서 한 개의 비트를 변경하면 새로운 코드가 되기 때문에 아날로그-디지털 변환, 데이터 전송 등에 주로 사용되는 코드는?(정답보기)

   가. DEBDIC Code 나. Hamming Code

   다. ASCII Code 라. Gray Code


7. ASCII 코드에 대한 설명으로 잘못된 것은? (정답보기)

    가. 3개의 Zone비트를 가지고 있다.

    나. 16비트 코드로 미국 표준협회에서 개발하였다.

    다. 통신 제어용으로 사용한다.

    라. 128가지의 문자를 표현한다.

※ 원래 아스키는 7비트로 128개의 문자 표현이 가능하면 확장 아스키로 8비트를 사용합니다. 아스키 코드를 구성할때 7비트중 앞쪽 3비트를 Zone 영역으로 해서 분류별 코드를 부여했습니다.


8. 스타트 비트가 1개, 스톱 비트가 2개, 패리티 비트가 1개 그리고 데이터 비트가 7개인 ASCII 코드에서 110 bps로 전송될 때 초당 전송되는 글자수는 ? (정답보기)

    가. 110자 나. 8자

    다. 10자 라. 11자

※ 한 글자가 전송되기 위해 필요한 비트수는 1(스타트비트)+1(패리티)+7(아스키)+2(스톱) 으로 11비트입니다. 110bps는 bits per seconds이므로 초당 110비트임을 감안하면 됩니다.


9. 전송하려는 부호들의 최소 해밍 거리가 6일 때 수신 시 정정할 수 있는 최대 오류의 수는? (정답보기)
    가. 1 나. 2
    다. 3 라. 6

10. 데이터 전송에 있어서 패리티 비트(parity bit)를 첨부하는 목적은? (정답보기)

가. 오류(Error)의 정정 나. 효율(전송률)향상

다. 오류의 검출(Checking) 라. 비용(Cost)감소


11. 하드웨어(Hardware)적으로 에러(Error)를 검출하기 위하여 1개의 체크 비트(Check Bit)를 가지는데 이것을 무엇이라 하는가? (정답보기)

가. 체크 디지트(Check Digit) 나. 캐리 비트(Carry Bit)

다. 바이너리 비트(Binary Bit) 라. 패리티 비트(Parity Bit)


12. 데이터통신 방식의 에러 체크 방식으로서 우수 패리티 체크 방식은 1개 블록중에서 수평에 대한 1의 수를 어떻게 하고 있는가? (정답보기)

가. 5개가 되도록 한다. 나. 짝수가 되도록 한다.

다. 홀수가 되도록 한다. 라. 0이 되도록 한다.

※ 해밍 코드 생성 과정을 감안합니다.

13. 에러(error)를 검출하기 위하여 1개의 체크 비트(check bit)를 가지는데 이것을 무엇이라 하는가? (정답보기)
    가. 바이너리 비트(binary bit)
    나. 패리티 비트(parity bit)
    다. 캐리 비트(carry bit)
    라. 체크 디지트(check digit)

14. 패리티 검사(parity check)에 대한 설명으로 옳은 것은? (정답보기)
    가. 기수 패리티체크는 1bit의 수가 짝수가 되도록 한다.
    나. 두 bit가 동시에 에러를 발생해도 검출이 가능하다.
    다. 우수 패리티체크는 1bit의 개수가 홀수가 되도록 한다.
    라. 코드에 여분의 비트를 검사 비트로 첨가하여 착오를 검출하는 방법이다.
※ 우수-짝수, 기수-홀수

15. 패리티 검사에 대한 설명으로 틀린 것은? (정답보기)
    가. 패리티 검사는 주로 저속 비동기방식에서 이용된다.
    나. 패리티 비트는 짝수(Even) 혹은 홀수 (Odd) 패리티로 사용된다.
    다. 전송 중 짝수개의 에러 비트가 발생해도 에러 검출이 가능하다.
    라. 패리티 검사를 통하여 전송 신뢰를 높일 수 있다.



댓글
  • 프로필사진 야호 검색하다가 오게되었는데 이해하기 쉽게 설명해 주셔서 너무 좋네요ㅠㅠ 개념정리가 잘 안돼서 힘들었는데 도움 많이 받고 갑니다ㅠㅠ 정말 감사합니다! 2017.11.06 15:57
  • 프로필사진 야라바 도움이 되셨다니 감사합니다. 2017.11.07 09:03 신고
댓글쓰기 폼