Introduction to Computer System 컴퓨터의 이해 3: 데이터 표현 School of Computer Science and Engineering Pusan National University Jeong Goo Kim
컴퓨터 내부에서의 데이터 표현 컴퓨터는 기본적으로 전자 장치 두 가지 상태를 표현하는 간단한 방법 컴퓨터 내의 수 많은 아주 작고 아주 빠른 장치들이 전자의 흐름을 제어하여 기능을 수행함 두 가지 상태를 표현하는 간단한 방법 전압의 존재 (특정 수준 이상의 전압) – 상태 “1” 전압의 부재 (특정 수준 이하의 전압) – 상태 “0” 전압의 존재 여부가 아닌 전압 값을 이용하면 보다 많은 상태를 표현할 수 있지만 제어 및 검출 회로가 복잡해짐
컴퓨터는 이진(Binary) 디지털(Digital) 시스템 Digital System 유한하고 이산적인 (Finite and Discrete) 값만을 가지는 시스템 Binary (Base 2) System 0과 1 두 가지 상태 값만 가지는 시스템 정보의 기본 단위 binary digit bit 두 가지 상태 이상을 필요로 할 경우 여러 비트로 표현 2 bits – 00, 01, 10, 11 : 4개의 상태 표현 가능 3 bits – 000, 001, 010, 011, 100, 101, 110, 111 : 8개의 상태 표현 𝑛 bits – 2 𝑛 개의 상태 표현
표현 대상이 되는 데이터에는 뭐가 있을까? 데이터 형식(Data type) 표현 대상이 되는 데이터에는 뭐가 있을까? 수 (Numbers) – 부호 포함 여부 (signed, unsigned), 정수(integers), 유리수(rational), 무리수(irrational), 부동 소수점(floating point), 복소수(complex), … 텍스트 (Text) – 문자(characters), 문자열(strings), … 이미지 (Images) – 픽셀(pixels), 색상(colors), 형태(shapes), … 소리 (Sound) 논리 값(Logical) – 참(true), 거짓(false) 명령어 (Instructions) … 데이터 형식(Data type) 단순히 정보를 표현(Representation)하는 방법만을 의미하지 않음 컴퓨터에서 데이터 형식이란 정보 표현 뿐 아니라 그 데이터 형식에 대해 수행 가능한 연산(Operation)을 가져야 함. ISA = (고유의 데이터 형식 집합) + (각 데이터 형식에 적용 가능한 연산 집합)
Unsigned Integers – 부호가 없는 정수 (음의 값 X) Non-positional notation 위치가 특별한 의미를 가지지 않는 표현 예) “5”는 5개의 1과 같으므로 “11111”이라는 문자열로 표현 어떤 문제가 있을까? Weighted positional notation 위치가 의미를 가지는 표현 예) 10진수 값 “329” : “3”은 그 위치로 인해 300을 의미 most significant bit (최대 유효 비트) least significant bit (최소 유효 비트) 329 102 101 100 101 22 21 20 3x100 + 2x10 + 9x1 = 329 1x4 + 0x2 + 1x1 = 5
Unsigned Integers (cont.) 𝒏 bits로 𝟎 ~ 𝟐 𝒏 −𝟏 까지 𝟐 𝒏 개의 음이 아닌 정수 표현 가능 22 21 20 1 2 3 4 5 6 7
Unsigned Binary Arithmetic Base-2 덧셈 – 10진수 덧셈 하듯이 수행하면 됨 오른쪽부터 왼쪽으로 덧셈을 함. 합하여 2가 되면 자리 올림(Carry) carry 10010 10010 1111 + 1001 + 1011 + 1 11011 11101 10000 10111 + 111 뺄셈, 곱셈, 나눗셈도 유사함
Signed Integers – 부호를 가지는 정수 𝒏 bits로 𝟐 𝒏 개의 서로 다른 값 표현 가능 그 중 약 절반을 (1 ~ 2 𝑛−1 ) 구간의 양의 정수 표현을 위해, 또 다른 절반을 (− 2 𝑛−1 ~ −1) 음의 정수 표현을 위해 할당 두 개 값이 남는데 하나는 0을 표현, 나머지 하나는 여유분 양의 정수 부호 없는 (unsigned) 정수와 같이 해석 단, 최상위(MS – Most Significant) 비트 값이 0 : 예) 00101 = 5 음의 정수 ? 최상위 비트값이 1 가능한 표현법들 Signed Magnitude (부호-절대값) 예) 10101 = -5 One’s Complement (1의 보수) 예) 11010 = -5 Two’s Complement (2의 보수) 예) 11011 = -5 선택 기준: “연산 회로 구현의 편의성”
Signed Integer – Signed Magnitude 첫 비트는 부호 그 이하는 절대값 값의 표현 범위 : − 2 𝑛−1 +1≤𝑖≤ 2 𝑛−1 −1 문제점 덧셈, 뺄셈 수행의 어려움 두 개의 0 값 -4 10100 -3 10011 -2 10010 -1 10001 -0 10000 +0 00000 +1 00001 +2 00010 +3 00011 +4 00100
Signed Integer - One’s Complement Invert All Bits 절대 값이 같은 양의 정수의 각 비트 값을 바꿈 값의 표현 범위 : − 2 𝑛−1 +1≤𝑖≤ 2 𝑛−1 −1 문제점 덧셈, 뺄셈 수행의 어려움 두 개의 0 값 -4 11011 -3 11100 -2 11101 -1 11110 -0 11111 +0 00000 +1 00001 +2 00010 +3 00011 +4 00100
Signed Integer – Two’s Complement “부호-절대값”과 “1의 보수” 표현법의 문제점 0의 2가지 표현법 : +0 과 –0 산술 연산 회로가 복잡 예) 부호-절대값 방식에서 2 + (-3) “00010” + “10011” 예) 1의 보수 방식에서 4 + (-3) “00100” + “11100” “2의 보수” 표현법은 보다 간단한 산술 연산 회로를 위해 개발 양수 X와 그에 대응하는 음수 (-X)의 표현을 기본 이진 덧셈 했을 때 모든 비트가 0이 되도록, 즉 X + (-X) = 0을 만족하도록 음수 표현 이진 덧셈 시 마지막 자리 올림은 무시 00101 (5) 01001 (9) + 11011 (-5) + (-9) 00000 (0) 00000 (0)
2의 보수 표현법 + 1 + 1 11011 (-5) (-9) 0 또는 양수 음수 00101 (5) 01001 (9) 일반적인 이진 표현, 최대 유효 비트 값은 0 음수 절대 값이 같은 양수 값 표현으로부터 시작 각 비트 값을 변경 0은 1로, 1은 0으로; 즉 1의 보수 표현 그것에 1을 더함 00101 (5) 01001 (9) 11010 (1’s comp) (1’s comp) + 1 + 1 11011 (-5) (-9)
Two’s Complement Signed Integers 𝒏 bits 표현 가능한 수 : − 𝟐 𝒏−𝟏 ~ 𝟐 𝒏−𝟏 −𝟏 최소 (절대값은 가장 큰) 음수 (− 𝟐 𝒏−𝟏 )에 양수 대응 값은 없음 최대 유효 비트는 부호 비트 : − 𝟐 𝐧−𝟏 만큼의 무게를 가짐 -23 22 21 20 1 2 3 4 5 6 7 -23 22 21 20 1 -8 -7 -6 -5 -4 -3 -2 -1
2의 보수 2진수를 10진수로 변환하는 법 n 2n X = 01101000two = 26+25+23 = 64+32+8 첫 비트, 즉 최대 유효 비트가 1이면 그것의 2의 보수, 즉 대응하는 양수를 구함 1의 값을 가진 비트들에 대해 해당 위치에 따른 2의 거듭 제곱 값을 구함 원래 값이 음수였다면 마이너스 부호를 붙임 n 2n 1 2 4 3 8 16 5 32 6 64 7 128 256 9 512 10 1024 X = 01101000two = 26+25+23 = 64+32+8 = 104ten
X = 00100111two = 25+22+21+20 = 32+4+2+1 = 39ten n 2n X = 11100110two 추가 예제 X = 00100111two = 25+22+21+20 = 32+4+2+1 = 39ten n 2n 1 2 4 3 8 16 5 32 6 64 7 128 256 9 512 10 1024 X = 11100110two -X = 00011010 = 24+23+21 = 16+8+2 = 26ten X = -26ten
10진수를 2의 보수 2진수 표현으로 변환하는 법 (1) X = 104ten 104/2 = 52 r0 bit 0 방법 1 : 2 나누기에 기초한 방법 10진수의 절대값 구하기 (당연히 양수 값임) 2로 나눔 – 나머지는 최소 유효 비트 값 결과가 0이 될 때까지 계속 2로 나눔; 나머지 값을 오른쪽부터 왼쪽으로 써 나감 최대 유효 비트에 0을 덧붙임; 만약 원래 값이 음수인 경우 2의 보수 표현을 구함 X = 104ten 104/2 = 52 r0 bit 0 52/2 = 26 r0 bit 1 26/2 = 13 r0 bit 2 13/2 = 6 r1 bit 3 6/2 = 3 r0 bit 4 3/2 = 1 r1 bit 5 X = 01101000two 1/2 = 0 r1 bit 6
10진수를 2의 보수 2진수 표현으로 변환하는 법 (2) n 2n X = 104ten 104 - 64 = 40 bit 6 방법 2: 2의 거듭제곱 뺄셈에 기초한 방법 십진수의 절대값 구하기 그 수보다 같거나 작은 2의 거듭제곱 값을 뺌 해당 위치의 비트 값을 1로 만듦 결과가 0이 될 때까지 뺄셈을 계속함 최대 유효 비트에 0을 덧붙임 만약 원래 값이 음수인 경우 2의 보수 표현을 구함 n 2n 1 2 4 3 8 16 5 32 6 64 7 128 256 9 512 10 1024 X = 104ten 104 - 64 = 40 bit 6 40 - 32 = 8 bit 5 8 - 8 = 0 bit 3 X = 01101000two
연산 : 산술 연산과 논리 연산 데이터 형식은 표현과 연산 모두를 포함한다는 점을 상기하라. Signed Integer 표현 방법 알았으니 관련한 산술 연산 (Arithmetic Operation)을 살펴보자. 덧셈 (Addition) 뺄셈 (Subtraction) 부호 확장 (Sign Extension) 덧셈 시 넘침(Overflow) 현상 및 조건에 대해 이해하자. 유용한 논리 연산(Logical Operations)도 살펴보자. 논리곱 (AND) 논리합 (OR) 부정 (NOT) 곱셈과 나눗셈 등은 위 연산들을 조합하여 구현 가능하다.
연산 : 산술 연산과 논리 연산 + 11110000 (-16) + (-9) 01011000 (98) (-19) Addition 연산 : 산술 연산과 논리 연산 2의 보수 표현에서 덧셈은 일반 2진 덧셈과 동일함 덧셈을 할 모든 정수가 동일한 수의 비트를 가진다고 가정함 마지막 자리 올림 (Carry Out)은 무시 01101000 (104) 11110110 (-10) + 11110000 (-16) + (-9) 01011000 (98) (-19)
Subtraction - 00010000 (16) - (-9) + 11110000 (-16) + (9) 뺌수의 부호를 바꾸고 빼임수와 더함 A – B : A (빼임수,피감수/minuend); B (뺌수, 감수/subtrahend) 모든 정수가 동일한 수의 비트를 가진다고 가정함 마지막 자리 올림은 무시 01101000 (104) 11110110 (-10) - 00010000 (16) - (-9) + 11110000 (-16) + (9) 01011000 (88) (-1)
Sign Extension 두 수를 더하려면 두 수를 같은 비트 수로 표현하여야 한다. 왼쪽을 단순히 0으로 채울 경우 최대 유효 비트, 즉 부호 비트로 채울 경우 4-bit 8-bit 0100 (4) 00000100 (still 4) 1100 (-4) 00001100 (12, not -4) 4-bit 8-bit 0100 (4) 00000100 (still 4) 1100 (-4) 11111100 (still -4)
Overflow and Under flow 연산 결과 값이 너무 크거나 작아서 𝒏 bits로 표현할 수 없는 경우 32bit로 표현할 수 있는 가장 큰 양의 정수 값 = 𝟐 𝟑𝟏 −𝟏=𝟎𝐱 𝟕𝐅 𝐅𝐅 𝐅𝐅 𝐅𝐅에 1을 더하면 어떻게 될까? 4 bits 정수의 overflow/Underflow 이진수 2의 보수 0000 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 -8 1001 -7 1010 -6 1011 -5 1100 -4 1101 -3 1110 -2 1111 -1 01000 (8) 11000 (-8) + 01001 (9) + 10111 (-9) 10001 (-15) 01111 (+15) Underflow Overflow 01111111 11111111 11111111 11111111 + 00000000 00000000 00000000 00000001 --------------------------------------- 10000000 00000000 00000000 00000000
Logical Operations 논리 참 또는 거짓에 대한 연산 𝒏 bit로 표현된 수에 대한 논리 연산 ? A B 참(TRUE) = 1, 거짓(FALSE) = 0 𝒏 bit로 표현된 수에 대한 논리 연산 ? 수를 𝑛 개의 논리 값의 집합으로 해석하고 논리 연산을 수를 구성하는 각 bit들에게 독립적으로 적용 A B A AND B 1 A B A OR B 1 A NOT A 1
Examples of Logical Operations AND - 논리곱 비트 값을 지울 때 유용함 0으로 AND = 원래 값에 관계 없이 0 1로 AND = 원래 값에 변화 없음 OR - 논리합 비트 값을 채울 때 유용함 0으로 OR = 원래 값에 변화 없음 1로 OR = 원래 값에 관계 없이 1 NOT - 부정 인자가 하나인 단항 연산 모두 비트 값을 뒤집음 01, 10 11000101 AND 00001111 00000101 11000101 OR 00001111 11001111 NOT 11000101 00111010
16진수 표현 (Hexadecimal Notation) 2진수를 16진수로 표현하는 것이 편리한 경우가 많음 표현에 필요한 기호의 수 감소– 4 bits를 하나의 16진수 기호로 틀릴 확률 감소 – 긴 0과 1의 연속이 나타날 수 있어 2진수 문자열은 틀리기 쉬움 Binary Hex Decimal 0000 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 Binary Hex Decimal 1000 8 1001 9 1010 A 10 1011 B 11 1100 C 12 1101 D 13 1110 E 14 1111 F 15
2진수를 16진수로 변환하는 법 2진수를 16진수로 변환하는 법 오른 쪽부터 4 bits 묶어 16진수 기호로 변환 011101010001111010011010111 3 A 8 F 4 D 7 16진수 표현은 또 다른 컴퓨터 내부 표현 방식은 아님. 컴퓨터 내부의 표현 방식인 2진수를 보다 편리하게 작성하기 위한 것임에 유의
Fractions: Fixed-Point 소수는 어떻게 표현하여야 할까? 일반 10진 소수에서 소수점을 사용하듯이 2진 소수점 사용 소수점을 기준으로 2의 + 거듭제곱에서 2의 – 거듭제곱으로 2의 보수 표현 기반 정수 덧셈과 뺄셈이 소수에 대해서도 활용 가능 덧셈을 할 때 소수점 위치를 맞추어야 함 00101000.101 (40.625) + 11111110.110 (-1.25) 00100111.011 (39.375) 2-1 = 0.5 2-2 = 0.25 2-3 = 0.125
Very Large and Very Small: Floating-Point 큰 수의 예 : 𝟔.𝟎𝟐𝟑×𝟏 𝟎 𝟐𝟑 - 79 bits가 필요 작은 수의 예: 𝟔.𝟔𝟐𝟔×𝟏 𝟎 −𝟑𝟒 - 110 bits 이상이 필요 과학적 기수법(Scientific Notation) 개념을 차용 과학적 기수법 : 𝑎× 10 𝑏 아주 크거나 작은 수를 편리하게 나타내기 위한 표준화된 표현법 부동(浮動) 소수점 (Floating Point) 표현 : 𝐹× 2 𝐸 𝐸 값에 따라 소수점 변경 소수부 𝐹, 지수부 𝐸 그리고 부호를 표현하는 방법이 필요 IEEE 754 Floating-Point Standard (32-bits): 1b 8b 23b Exponent = 255 used for special values: If Fraction is non-zero, NaN (not a number). If Fraction is zero and sign is 0, positive infinity. If Fraction is zero and sign is 1, negative infinity. S Exponent Fraction 𝑁= −1 𝑆 ×1.𝐹× 2 𝐸−127 , 1≤𝐸≤254 𝑁= −1 𝑆 ×0.𝐹× 2 −126 , 𝐸=0
Floating Point Example Single-precision IEEE floating point number: 10111111010000000000000000000000 부호 값 1 – 음수를 의미 지수 값 01111110 = 126 (10진수). 소수부 값 0.100000000000… = 0.5 (10진수). Value = -1.5 x 2(126-127) = -1.5 x 2-1 = -0.75. sign exponent fraction
문자 정보 표현과 문자 코드 문자 코드/부호 : 각 문자에 고유 번호(숫자)를 부여하여 표현 대표적 문자 코드 : ASCII ASCII(American Standard Code for Information Interchange) 128개의 문자를 7 비트를 사용하여 표현: 2^7 = 128, 2^8=256 대문자(A, B, C 등등) 소문자(a, b, c 등등) 구두점(punctuation)(마침표, 세미콜론, 쉼표 등등) 숫자(digit)(0에서 9까지) 공백 문자(‘ ’) 특수 문자(&, |, \ 등) 제어 문자 열복귀(carriage return), 널(null), 문서-끝-표시자(end-of-text) 액센트(accent)가 있는 문자
'A'== 0x41 == 65(10) 'z'== 0x7A == 122(10) ASCII 코드표 (비확장) 00 nul 10 dle 20 sp 30 40 @ 50 P 60 ` 70 p 01 soh 11 dc1 21 ! 31 1 41 A 51 Q 61 a 71 q 02 stx 12 dc2 22 " 32 2 42 B 52 R 62 b 72 r 03 etx 13 dc3 23 # 33 3 43 C 53 S 63 c 73 s 04 eot 14 dc4 24 $ 34 4 44 D 54 T 64 d 74 t 05 enq 15 nak 25 % 35 5 45 E 55 U 65 e 75 u 06 ack 16 syn 26 & 36 6 46 F 56 V 66 f 76 v 07 bel 17 etb 27 ' 37 7 47 G 57 W 67 g 77 w 08 bs 18 can 28 ( 38 8 48 H 58 X 68 h 78 x 09 ht 19 em 29 ) 39 9 49 I 59 Y 69 i 79 y 0a nl 1a sub 2a * 3a : 4a J 5a Z 6a j 7a z 0b vt 1b esc 2b + 3b ; 4b K 5b [ 6b k 7b { 0c np 1c fs 2c , 3c < 4c L 5c \ 6c l 7c | 0d cr 1d gs 2d - 3d = 4d M 5d ] 6d m 7d } 0e so 1e rs 2e . 3e > 4e N 5e ^ 6e n 7e ~ 0f si 1f us 2f / 3f ? 4f O 5f _ 6f o 7f del 총 128개의 문자 27 = 128 7비트 필요 'A'== 0x41 == 65(10) 'z'== 0x7A == 122(10) key name symbol usage NUL Null '\0' String termination char BS Back space '\b' Erase a previous char HT Tab '\t' Column alignment LF New line '\n' Line feed
ASCII 코드의 특징 십진수 기호 (‘0’, ‘1’, …)과 ASCII 코드는 어떤 관계인가? 대문자('A', 'B', …) 와 그에 대응한 소문자 ('a', 'b', …)의 ASCII 코드 값 차이는? 2개의 ASCII 문자가 있을 때, 알파벳 순서로 표현 할 경우 어떤 문자가 앞에 오는지 알 수 있는가? 128개의 문자로 충분할까? 한글은? 한자는 ? (http://www.unicode.org/)
Extended ASCII Code 보조 자료 8비트로 확장됨 28 = 256 문자 표현
이진 자료의 해석 Example 그래서 메모리에 저장된 다음 4 Bytes는 무엇을 의미하는가? 각각의 Bytes가 ASCII-Code의 char라면 ? Kőln 각각의 Bytes가 8 bits signed integer면? 75, -108, 108, 110 각각의 Bytes가 8bits unsigned integer면? 75, 148, 108, 110 +0 +1 +2 +3 0x0000 4B 94 6C 6E
Other Data Type Text String Image Sound Other Data Types NULL(0) 문자로 끝나는 일련의 문자열로 표현 Image 화소(Pixel)들의 배열(Array)로 표현 흑백 : 1 bit (1/0 = 검은색/흰색) 컬러 : 컬러 요소 별로 표현, 예) 적,녹,청(RGB) 요소 별로 8 bits 할당 기타 속성 : 투명 Sound 아날로그 신호로 표현 되는 소리 정보를 이산 디지털 값으로 표현하기 위해 일정 시간 간격마다 소리 값을 샘플링 PCM – Pulse Coded Modulation
Homework Homework 유인물 읽기 발표 준비