2 데이터 표현과 컴퓨터 연산 IT CookBook, 컴퓨터 구조와 원리 2.0
학습목표 2진수의 음수의 표현법을 이해한다. 작은 비트수로 큰 수를 표현하는 방법을 이해한다. 2진수의 덧셈, 뺄셈, 곱셈, 나눗셈을 배우고 논리연산을 공부한다. 문자를 2진수로 표현하는 방법을 이해한다.
목 차 보수의 개념 데이터의 2진수 표현 2진수의 연산 문자 데이터의 표현
01 보수의 개념 수(數)의 분류
01 보수의 개념 보수(補數)의 정의 어원적 의미 상호 보완하는 수로, 임의의 수를 보완해주는 다른 임의의 수 r진법에서 정의되는 보수(complementary number) (r-1)의 보수 r의 보수(진보수)로 정의 예) 10진수에서는 9의 보수와 10의 보수가 존재 2진수에서는 1의 보수와 2의 보수가 존재
01 보수의 개념 보수(補數)의 정의 r진법에서 (r-1)의 보수 A라는 수에 B라는 수를 더한 결과값의 각 자리가 (r-1)이 될 때, B를 A에 대한 (r-1)의 보수라고 정의 예) 10진수 (237)10에 대한 9의 보수를 B라고 하면 237 + B = (1000-1) → 237 + B = 999 B = 999-237 = 762 r진법에서 r의 보수 A라는 수에 B라는 수를 더해서 각 자리마다 자리올림이 발생하고 해당 자리는 0이 될 때, B를 A에 대한 r의 보수라고 정의 예) 10진수 (237)10에 대한 10의 보수를 B라고 하면 237 + B = 1000 → B = 1000 -237 = 763
01 보수의 개념 r진수에서 (r-1)의 보수 r진법에서 임의의 정수 (N)r이 자릿수가 n개로 구성될 때, (r-1)의 보수 정의를 수식으로 표현하면 → (rn - 1) – N 예) (237)10의 (10-1), 즉 9의 보수 : (10 3 – 1) – 237 = 999-237 = 762 10진수에서 9의 보수 9의 보수는 각 자리의 숫자를 각각의 9에서 뺀 것과 같음 예) (546700)10에 대한 9의 보수를 구하여라. (rn - 1) – N = (106 - 1) – 546700 = 999999 - 546700 = (453299) 10 2진수에서 1의 보수 2진수에 대한 1의 보수는 각 자리의 숫자를 각각의 1에서 뺀 것과 같음 예) (1011001) 2에 대한 1의 보수를 구하여라. (rn - 1) – N = (2 7 - 1) – 1011001 = 1111111 - 1011001 = (0100110)2
01 보수의 개념 r진수에서 r의 보수 r진법에서 임의의 정수 (N)r이 자릿수가 n개로 구성될 때, r의 보수 정의 rn – N (N=0일 경우 0으로 정의) r의 보수는 다음의 관계에 의해서 (r-1)보수로부터 쉽게 얻어짐 rn-N = [(rn-1)-N]+1 r의 보수는 (r-1)의 보수에 1을 더하면 됨 예) (101100)2에 대한 2의 보수를 구하여라. 2진수에 대한 1의 보수 : 111111 – 101100 = 010011 2진수에 대한 2의 보수 : 010011 + 1 = 010100
01 보수의 개념 부호가 없는 2진수의 뺄셈 연산에서 보수의 활용 컴퓨터에서 뺄셈 연산은 보수를 이용하는 것이 효율적 부호를 표시하지 않는 10진수에서 보수를 이용한 뺄셈 연산이다. 예1) 8 – 6 = 2 8은 빼어지는 수로 피감수라하며, 6은 빼는 수로 감수라고 함. 감수를 10의 보수로 표현하게 된다면 뺄셈연산은 덧셈 연산으로 대체할 수 있음 8 – 6 = 8 + (-6) = 2 6일 때 9의 보수 : (10 - 1) – 6 = 3 6일 때 10의 보수 : 3 +1 = 4 구해진 10의 보수를 피감수 8과 덧셈을 수행하면 "8 + 4 = 12”다. 10의 자리는 버리고 1의 자리만 취하면 원하는 값 2를 얻을 수 있음.
01 보수의 개념 부호가 없는 10진수에서 보수를 이용한 뺄셈 연산 예) 2 - 4 = 2(?) 예) 2 - 4 = 2(?) 감수가 피감수보다 큰 값이므로 결과는 음의 값이다. 부호를 표현할 수 없는 10진수이므로 결과 2는 음의 값으로 간주한다. 감수 7의 9의 보수를 구하고 그 결과로부터 10의 보수를 구하면, 4일 때, 9의 보수 : (10 - 1) – 4 = 5, 4일 때, 10의 보수 : 5 +1 = 6 구해진 10의 보수를 피감수와 덧셈을 수행 : 2 + 6 = 8 얻어진 연산 결과의 10의 보수 8의 9의 보수 : (10 - 1) – 8 = 1, 8의 10의 보수 : 1 +1 = 2 얻어진 10의 보수 2는 실제적으로는 음수 -2라는 것을 고려하여야 한다.
01 보수의 개념 부호가 없는 2진수에서 보수를 이용한 뺄셈 연산 예) 보수를 이용한 2진수 뺄셈 결과가 최상위 자리에서 자리 올림이 발생하는 경우 1011 - 0100 = 0111 감수 0100의 1의 보수를 구하고 그 결과에 0001을 더해서 2의 보수를 구하면 0100의 1의 보수 : (10000 - 00001) – 0100 = 1111 – 0100 = 1011 0100의 2의 보수 : 1011 + 0001 = 1100 구해진 2의 보수를 피감수하고 덧셈하면 1011 + 1100 = 10111 자리올림으로 발생한 최상위 자리의 값을 버리고 나머지 값들을 취하면 원래의 뺄셈의 결과와 동일한 0111을 얻는다.
01 보수의 개념 부호가 없는 2진수에서 보수를 이용한 뺄셈 연산 예) 보수를 이용한 2진수 뺄셈의 결과가 최상위 자리에서 자리올림이 발생하지 않는 경우 0111 - 1010 = 1100(?) 0111보다 1010이 더 큰 수이므로 연산의 결과 값 1100은 맞지 않는다. 2의 보수를 구하면 1010의 1의 보수 : (10000 - 00001) – 1010 = 1111 – 1010 = 0101 1010의 2의 보수 : 0101 + 0001 = 0110 구해진 2의 보수를 피감수하고 덧셈하면 : 0111 + 0110 = 1101 얻어진 결과 1101의 2의 보수를 구하면 1101의 1의 보수 : (10000 - 00001) – 1101 = 1111 – 1101 = 0010 1101의 2의 보수 : 0010 + 0001 = 0011 연산 결과는 음의 값이나 부호가 없는 2진수이므로 (-)0011의 의미를 갖는다. 10진수와 비교하면 : (0111 - 1010 = -0011)2 ⇔ (7 - 10 = -3)10
01 보수의 개념 부호가 없는 2진수의 뺄셈 연산 2진수의 1의 보수는 각 자리마다 0→1 또는 1→0으로의 비트 반전으로 얻음 2진수의 뺄셈 연산 과정 감수의 비트 반전을 통한 1의 보수를 구한다. 1의 보수에 1을 더해서 2의 보수를 구한다. 피감수와 2의 보수를 더한다. 최상위 자리에서 자리올림이 발생하면 새로 생긴 최상위 자리를 버리고 나머지 자리의 값을 취한다. 최상위 자리에서 자리올림이 발생하지 않으면 덧셈 결과의 2의 보수를 구한다. 그리고 음수의 값으로 간주한다. 2진법의 뺄셈과정에서 보수를 사용하면 덧셈 연산만으로 뺄셈 연산을 수행할 수 있음
02 데이터의 2진수 표현 일반적인 디지털 장치에서는 2진수로 양의 정수, 음의 정수, 소수를 표현 일반적인 디지털 장치에서는 2진수로 양의 정수, 음의 정수, 소수를 표현 2진수는 0, 1, 부호 및 소수점의 기호를 이용하여 수를 표현 부호가 있고 소수점을 포함하는 동일 값의 10진수와 2진수를 나타낸 예 (-13.625)10 = (-1101.101)2 2진법으로 부호를 갖는 정수와 소수를 표현하려면 추가적으로 부호와 소수점의 기호를 사용하여야 하므로 단순한 진법 변환으로 해결되지 않음
02 데이터의 2진수 표현 정수의 표현 자연수 또는 양수의 10진수를 2진법으로 변환하면 부호가 없는 2진법으로 표현함 10진수를 2진수의 기수 2로 연속해서 나누고 이때 얻어지는 나머지가 2진수의 가수가 되어 2진수로 표현함 10진수 (53)10을 부호 없는 2진수로 표현하는 과정 : (53)10 = (110101)2 자연수의 10진수들을 부호가 없는 2진수로 표현한 예다. (57)10 = (00111001)2, (0)10 = (00000000)2 (1)10 = (00000001)2, (128)10 = (10000000)2 (255)10 = (11111111)2
02 데이터의 2진수 표현 부호가 존재하는 2진 정수의 표현 디지털 장치에서는 부호를 구분할 수 있는 (+)와 (-)같은 별도의 기호는 존재하지 않고 최상위 비트 자리를 부호 비트로 할당하고 0이면 양수, 1이면 음수로 표현하여 처리 나머지 비트들은 적절한 형태로 크기 값을 표현 부호화-크기 표현(signed-magnitude representation) 1의 보수 표현(1's complement representation) 2의 보수 표현(2's complement representation)
02 데이터의 2진수 표현 부호화-크기 표현 n비트로 구성된 2진수에서, 최상위 비트는 부호비트(signed bit)이고 나머지 n-1개의 비트들은 수의 절대 크기(magnitude)를 나타낸다. (+9)10 = (0 0001001)2 (+35)10 = (0 0100011)2 (-9)10 = (1 0001001)2 (-35)10 = (1 0100011)2 부호화-크기 방법으로 표현된 2진수(an-1 an-2 ... a1 a0)를 10진수로 변환하는 방법이다. 부호 비트를 통해서 부호를 결정, 크기 비트는 일반적인 10진수 변환방법과 동일 하다. A = (-1)an-1 (an-2×2n-2 + an-3×2n-3 + ... + a1×21 + a0×20) (0 0100011)2 = (-1)0(0×26 + 1×25 + 0×24 + 0×23 + 0×22 + 1×21 + 1×20) = (32 + 2 + 1) = (35)10 가장 간단한 개념으로 부호를 표현하지만, 덧셈과 뺄셈 연산을 수행하기 위 해서는 부호비트와 크기 부분을 별도로 처리하여야 한다. 0(zero)의 표현이 두 개 존재하므로 표현할 수 있는 수의 범위가 준다. (0 0000000)2 = (+0)10 (1 0000000)2 = (-0)10
02 데이터의 2진수 표현 보수를 이용한 부호를 갖는 2진수의 표현 1의 보수(1's complement) 표현: 모든 비트를 반전 (0 → 1, 1 → 0) 2의 보수(2's complement) 표현: 모든 비트들을 반전하고, 결과값에 1을 더함 보수를 이용한 2진수의 부호변경 (+9)10 = (0 0001001)2 (+35)10 = (0 0100011)2 (-9)10 = (1 1110110)2 (1의 보수) (-35)10 = (1 1011100)2 (1의 보수) (-9)10 = 1 1110111 (2의 보수) (-35)10 = (1 1011101)2 (2의 보수) 보수를 이용하면 부호비트가 자연스럽게 변경되고 그 크기도 적절한 형태로 변경된다. 2의 보수는 0에 대한 표현이 하나만 있으며, 산술 연산이 용이하다. 2의 보수는 가장 효율적이기 때문에 컴퓨터를 비롯한 디지털 장치에 부호를 갖는 2진수를 표현하는데 사용함.
02 데이터의 2진수 표현 10진수의 2의 보수로 표현된 2진수 변환 과정 10진수 (-25) 10를 2의 보수로 표현된 2진수를 변환하는 과정 1단계 : 10진수를 부호가 없는 2진수로 변환한다. (25)10= (11001)2 2단계 : 부호 비트를 삽입한다. (25)10= (011001)2 3단계 : 1의 보수를 구한다. (011001)2 ⇒ (100110)2 4단계 : 2의 보수를 구한다. (100110)2 ⇒ (100111)2 다음 결과를 얻을 수 있다. (-25)10 ⇒ (100111)2
02 데이터의 2진수 표현 2의 보수로 표현된 2진수를 10진수로 변환 2의 보수로 표현된 양의 정수(최상위 비트: an-1 = 0)는 부호 비트를 제외한 크기의 비트들은 실제의 크기를 나타낸다. 부호 없는 2진수를 10진수로 변환하는 방법과 동일하다. A = an-2×2n-2 + an-3×2n-3 + ... a1×21 + a0×20 2의 보수로 표현된 음의 정수(최상위 비트: an-1 = 1) 부호 비트의 해당하는 최상위 비트의 자릿수를 2의 승수로 표현하고 (-)를 붙여서 음수가 되도록 한다. 나머지 비트는 양의 정수와 동일하다. A = - 2n-1 + (an-2×2n-2 + an-3×2n-3 +… a1×21 + a0×20) 예) (10101110)2 = - 128 + (1 × 25 + 1 × 23 + 1 × 22 + 1 × 21) = (-82)10
02 데이터의 2진수 표현 2의 보수로 표현된 음의 정수(최상위 비트: an-1 = 1) 2진수 음의 정수를 보수를 이용하여 양의 정수로 만들고 이것을 10진수로 변환. 그리고 최종 단계에서 (-) 부호를 붙이는 방식이다. 예) 1단계 : 2의 보수를 이용하여 음수를 양수로 변환 (10101110 → 01010010) 2단계 : (01010010)2 = - (1 × 26 + 1 × 24 + 1 × 21) = - (64 + 16 + 2) = (-82)10
02 데이터의 2진수 표현 2진수의 표현 범위 2의 보수를 사용한 3비트 이진수 표현의 예 -2n-1 ≤ N ≤ 2n-1-1 +3 = (011)2 +2 = (010)2 +1 = (001)2 +0 = (000)2 -1 = (111)2 -2 = (110)2 -3 = (101)2 -4 = (100)2 표현할 수 있는 수의 범위는 -4 ~ 3이 된다. 이것은 -23-1 ~ 23-1-1로 표현된다. n비트 데이터의 경우로 일반화 해서 수의 범위를 나타내면 다음과 같다. -2n-1 ≤ N ≤ 2n-1-1
02 데이터의 2진수 표현 부호가 있는 8비트 이진수의 표현 부호화-크기 표현 : - (27 - 1) ∼ + (27 - 1) 1의 보수 : - (27 - 1) ∼ + (27 - 1) 2의 보수 : - 27 ∼ + (27 - 1)
02 데이터의 2진수 표현 비트 확장(Bit Extension) 부호가 존재하는 데이터의 비트 수를 늘리는 연산을 비트확장이라고 함 부호화-크기 표현의 비트확장 부호 비트를 확장되는 최상위 자리로 이동시키고, 나머지 새로 확장되는 크기 비트들은 0으로 채운다. (+21)10= (00010101)2 (8비트) → (+21)10=(0000000000010101)2 (16비트) (-21)10= (10010101)2 (8비트) → (-21)10=(1000000000010101)2 (16비트)
02 데이터의 2진수 표현 비트 확장(Bit Extension) 2의 보수로 표현된 2진수의 비트 확장 확장되는 상위 비트들을 부호 비트와 동일한 값으로 채운다. 부호 비트 확장(sign-bit extension)이라 한다. (+21)10=(00010101)2 (8 비트) → (+21)10=(0000000000010101)2 (16 비트) (-21)10=(11101011)2 (8 비트) → (-21)10=(1111111111101011)2 (16 비트) 16비트로 부호 확장된 양의 정수에 대한 2의 보수를 구하여 부호를 변경한다. 0000000000010101 ⇒ 1111111111101010 ⇒ 1111111111101011 구해진 2의 보수는 음의 정수와 동일하므로 부호 비트 확장의 방법이 정당함을 보여준다.
02 데이터의 2진수 표현 소수(Decimal Fraction)의 표현 정수와 소수를 포함한 10진수 (137.625)10= 137 + 0.625 10의 지수 승 형태로 표시 137 + 0.625 = 1×102 + 3×101 + 7×100 + 6×10-1 + 2×10-2 + 5×10-3 정수부분의 가수는 기수 10으로 연속으로 나눗셈을 수행해 얻은 나머지로 구할 수 있다. 소수부분은 지수가 음의 정수이므로 가수는 나눗셈의 반대인 곱셈을 연속적으로 수행하는 것이다. 그리고 정수부분으로 발생하는 자리올림수가 가수가 된다.
02 데이터의 2진수 표현 소수를 포함하는 10진수의 2진수 표현 2진수로 변환하기 위해서는 2의 지수 승으로 표현해야 한다. (137.625)10 = 1×102 + 3×101 + 7×100 + 6×10-1 + 2×10-2 + 5×10-3 = Am×2m + ···+ A1×21 + A0×20 + A-1×2-1 + A-2×2-2 + ··· + A-m×2-m 정수부분은 2로 연속적인 나눗셈을 소수부분은 2로 연속적인 곱셈을 수행한다. 1단계 : 정수부분과 소수부분을 분리한다. 2단계 : 정수부분의 10진수를 2진수로 변환한다. (137)10 = (10001001)10 3단계 : 소수부분의 10진수를 2진수로 변환한다. (0.625)10 = (0.101)2 4단계 : 얻어진 정수와 소수의 2진수를 합한다. (137.625)10 = (10001001)2 + (0.101)2 = (10001001.101)2
02 데이터의 2진수 표현 소수점을 포함하고 있는 이진수의 십진수로 변환 정수부분은 기존의 방법과 같이 2의 지수 승을 이용하여 분해한다. 소수점 이하는 2의 (-)지수 승을 사용한다. A = an-1 × 2-1 + an-2 × 2-2 + ... + a1 × 2-(n-1) + a0 × 2-n 소수를 포함하는 이진수 (1101.101)2를 십진수로 변환한다. (1101.101)2 = 1×23 + 1×22 + 0×21 + 1×20 + 1×2-1 + 0×2-2 + 1×2-3 = 8 + 4 + 1 + 0.5 + 0.125 = (13.625)10
02 데이터의 2진수 표현 부동소수점(Floating-point)의 표현 고정소수점(fixed-point)표현 부동소수점 표현 소수가 고정된 소수점을 통해서 구분하여 표현된 방식이다. : (17.60)10 표현 범위의 한계가 있어 아주 큰 값과 매우 작은 값을 표현하는 것이 불가능하다. 부동소수점 표현 지수를 사용 소수점의 위치를 이동하여 수의 표현 범위를 확대한다. (176,000)10 = 1.76 × 105, (0.000176)10 = 1.76 × 10-4 부동소수점 수(Floating-point Number)을 표현하는 일반적인 형식이다. ± M × B±E 여기서, ±는 부호로서 + 혹은 –을 나타낸다. 그리고 M은 가수(significand), B는 기수(base), E는 지수(exponent)를 나타낸다. 2진 부동소수점 수(binary floating-point number) 가수 M은 0과 1로 구성이 되는 2진수 이며, 기수 B는 2가 된다. +1.100101 × 23
02 데이터의 2진수 표현 2진 부동소수점 수는 표현 단일-정밀도(single-precision) 부동소수점 수 : 32비트로 표현 복수-정밀도(double-precision) 부동소수점 수 : 64비트로 표현 단일-정밀도 부동소수점 수 형식 32비트가 세 개의 필드로 구성된다. 부호 필드(S 필드)는 1비트로 0이면 양수이고 1이면 음수다. 지수 필드는 지수 값을 저장하는 곳이다. 8비트이므로 256(28)개를 표현할 수 있다. 가수 필드는 23비트이므로 8388608(223)개를 표현할 수 있다. 따라서 고정 소수점 수와 비교해서 표현할 수 있는 수의 범위가 훨씬 넓다.
02 데이터의 2진수 표현 2진 부동소수점 수는 표현 각 필드의 비트 할당 문제는 표현하는 수의 범위와 정밀도를 결정 지수(E) 필드의 비트 수가 늘어나면, 표현 가능한 수의 범위가 확장된다. 가수(M) 필드의 비트 수가 늘어나면, 이진수로 표현할 수 있는 수가 많아져서 정밀도가 증가하게 된다. 따라서 적절한 비트할당이 필요하다.
02 데이터의 2진수 표현 정규화된 표현(Normalized Representation) 부동소수점의 수는 지수의 값에 따라 표현이 여러 가지 존재한다. 0.1001×25, 100.1×22, 0.01001×26 정규화된 표현은 부동소수점 수에 대한 표현을 통일하기 위한 방법이다. ± 0.1bbb...b × 2E 위의 예에서 정규화된 표현은 0.1001 × 25이 된다. 단일 정밀도 부동소수점의 수에서 정규화된 표현 예) 0.1001 × 25을 필드 별로 비트로 표현하면 부호(S) 비트 = 0 / 지수(E) = 00000101 가수(M) = 1001 0000 0000 0000 0000 000
02 데이터의 2진수 표현 바이어스된 지수값 정규화된 표현에서 소수점 우측의 첫 번째 비트는 항상 1로 생략 가능하다. 정규화된 표현에서 소수점 우측의 첫 번째 비트는 항상 1로 생략 가능하다. 가수 필드 23비트를 이용하여 생략된 소수점 아래 첫 번째 1을 포함하여 24자리의 수까지 표현 가능하게 되어 1비트를 더 표현할 수 있다. 지수의 바이어스된 수(biased number)로 표현 지수 필드의 지수는 양의 값뿐만 아니라 음의 값을 가지므로 부호에 대한 표현을 가능하게 한다. 음수의 표현뿐만 아니라 0에 대한 표현에서 모든 비트가 0이 된다. 바이어스된 값은 원래의 지수 비트값에서 바이어스 값을 더해서 얻는다. 지수값이 4이면 이를 8비트의 이진수로 표현하면 00000100이 된다. 이것을 128로 바이어스된 값을 구하기 위해서는 128의 이진수값 10000000을 더해준다. 지수값 : (4)10 = (00000100)2 128로 바이어스 된 지수값: 00000100 + 10000000 = 10000100
02 데이터의 2진수 표현 지수 비트 패턴과 128로 바이어스된 지수 값
02 데이터의 2진수 표현 바이어스 값을 이용한 부동소수점 수 바이어스 값이 128일 때, - (13.625)10에 대한 부동소수점 수의 표현 (13.625)10 = (1101.101)2 = 0.1101101 × 24 이것을 필드 별로 비트열로 나타내면 부호(S) 비트 = 1 (-) 지수(E) = 00000100 + 10000000 = 10000100 (바이어스 128을 더한다) 가수(M) = 10110100000000000000000 (소수점 우측의 첫 번째 1은 제외)
02 데이터의 2진수 표현 부동소수점 수의 표현 범위 32비트 부동소수점 수의 표현 범위 정규화된 표현과 바이어스된 지수를 이용한 부동소수점 수의 표현이다. 32비트 부동소수점 수의 표현 범위 0.5 × 2-128 ~ (1 - 2-24) × 2127 사이의 양수들 -(1 - 2-24) × 2127 ~ -0.5 × 2-128 사이의 음수들 아주 작은 수와 그리고 아주 큰 수는 표현이 불가능하다. 그래서 제외되는 범위는 다음과 같다. (1 - 2-24) × 2127보다 작은 음수 → 음수 오버플로우(negative overflow) 0.5 × 2-128 보다 큰 음수 → 음수 언더플로우(negative underflow) 0.5 × 2-128 보다 작은 양수 → 양수 언더플로우(positive underflow) (1 - 2-24) × 2127 보다 큰 양수 → 양수 오버플로우(positive overflow) 32비트 부동소수점 수의 표현 범위
02 데이터의 2진수 표현 IEEE 754 표준 국제 표준 : ± 1.bbbb…bbb × 2±E 13.62510 = 1101.101 = 1.101101 × 23 표준형을 단일-정밀도 형식으로 표시 바이어스 값이 127이고 정수 값인 소수점 좌측의 1은 제외된다.
03 2진수의 연산 진수의 산술 연산 정수의 산술 연산 부호변경 : 덧셈, 뺄셈, 곱셈, 나눗셈 등의 산술연산과 참, 거짓을 판별하는 논리연산이 있다. 진수의 산술 연산 부호를 갖는 2진 정수의 산술 연산은 2의 보수를 활용하여 수행된다. 그리고 부동소수점의 수에 대한 산술 연산은 지수부분과 가수부분을 분리해서 독립적으로 수행된다. 정수의 산술 연산 부호변경(2의 보수) : A = A'+ 1 (A': 1의 보수) 덧 셈 : C = A + B 뺄 셈 : C = A - B 곱 셈 : C = A × B 나눗셈 : C = A / B 부호변경 : 2의 보수를 사용한다. 음의 정수를 2진수로 표현할 때 사용한다.
03 2진수의 연산 2진 정수의 덧셈 연산 오버플로우가 발생하지 않는 덧셈 연산 양수와 양수의 덧셈 최상위 비트에서 자리 올림이 발생하지 않아 계산의 결과에서 오류가 발생하지 않고 정확한 답을 출력한다. (+2)10 + (+3)10 = (+5)10 최상위 비트에서 자리 올림이 발생하지 않은 음수와 양수의 덧셈 최상위 비트에서 자리 올림수가 발생하지 않는다. 따라서 부호비트가 변경되는 등의 잘못된 계산이 발생하지 않아서 정확한 값을 얻을 수 있다. (-6)10 + (+3)10 = (-3)10
03 2진수의 연산 2진 정수의 덧셈 연산 오버플로우가 발생하지 않는 덧셈 연산 최상위 비트에서 자리 올림이 발생하는 음수와 양수의 덧셈 덧셈 결과로 발생하는 최상위 비트에서 자리 올림 수는 버림. 하지만 연산에는 오류가 없이 올바른 답을 얻을 수 있다. (-3)10 + (+5)10 = (+2)10 음수와 음수의 덧셈 음수와 음수의 덧셈은 필연적으로 최상위 비트에서 자리 올림이 발생하고 자리 올림 수는 버림을 통해서 버려진다. 그러나 그 결과는 정확한 값이다. (-2)10 + (-4)10 = (-6)10
03 2진수의 연산 2진 정수의 덧셈 연산 오버플로우가 발생하는 덧셈 연산 양수와 양수의 덧셈 음수와 음수의 덧셈 덧셈 결과가 표현할 수 있는 범위를 초과하여 결과값이 틀리게 되는 상태를 덧셈의 오버플로우 상태라고 한다. 양수와 양수의 덧셈 덧셈의 결과는 자리 올림으로 인해서 부호비트가 변경 잘못된 결과 발생한다. (+4)10 + (+5)10 = (+9)10 음수와 음수의 덧셈 자리 올림이 발생하고 부호 비트는 변경된다. (-7)10 + (-6)10 = (-13)10
03 2진수의 연산 2진수 정수의 뺄셈 연산 2의 보수를 사용 결과적으로 덧셈을 수행한다 오버플로우가 발생하지 않는 뺄셈 연산 A - (+B) = A + (-B), A - (-B) = A + (+B) 빼지는 수 A를 피감수(minuend)라 하며, 빼는 수 B를 감수라 한다. 오버플로우가 발생하지 않는 뺄셈 연산 연산 결과가 디지털 장치에서 표현할 수 있는 범위 안에 존재 연산의 결과는 정확하다. 최상위 비트에서 자리 올림수가 발생하지 않는 뺄셈 10진수에서는 감수를 음수화하고 그 다음 뺄셈을 덧셈으로 고치고 계산을 (+2)10 – (+5)10 = (+2)10 + (-5)10 = (-3)10 → 0010+1011=1101 최상위 비트에서 자리 올림 발생하는 뺄셈 (+5)10 – (+2)10 = (+5)10 + (-2)10 = (+3)10 → 부호비트의 변경은 없으나 자림 올림이 발생하였다. 자리 올림 수는 버려지게 되고 나머지를 취하면 올바른 값을 얻을 수 있다.
03 2진수의 연산 2진수 정수의 뺄셈 연산 뺄셈 결과가 그 범위를 초과하여 틀리게 되는 상태를 뺄셈 오버플로우라고 한다. 최상위 비트에서 자리올림이 발생하지 않는 경우 부호비트가 변경이 발생하지만 자림 올림이 발생하지 않은 경우? (+7)10 – (-5)10 = (+7)10 + (+5)10 = (+12)10 → 부호변경은 오버플로우가 발생한 것으로 답은 정확하지 않다. 최상위 비트에서 자리 올림이 발생하는 경우 부호비트가 변경되고 또한 최상위 비트에서 자리 올림이 발생한 경우 (-6)10 – (+4)10 = (-6)10 + (-4)10 = (-10)10 → 얻어진 결과에서 버림의 과정을 거쳤지만 그래도 뺄셈의 오버플로우가 발생한 경우로 계산결과는 잘못된 것이다.
03 2진수의 연산 2진 정수의 곱셈 연산 부호가 없는 2진수의 곱셈 A × B = C 곱하는 수(B)를 승수라고 하며, 곱하여 지는 수(A)를 피승수라고 한다. 부호가 없는 2진수의 곱셈 승수의 각 숫자에 대하여 부분 합을 계산, 승수의 한 비트가 0이면 부분 합도 0이 된다. 그러나 1이면 부분 합은 피승수와 동일하게 된다. 최종 결과값은 부분 합을 한 자릿수씩 왼쪽으로 이동하고, 더하여 구한다. 피승수 1101과 승수 1011과의 곱셈 과정, 4비트의 두 수가 서로 곱셈을 수행하면, 2배인 8비트의 길이의 결과를 출력 일반화하면, 두 N비트 2진 정수를 곱한 결과값의 길이는 2N 비트가 된다
03 2진수의 연산 2진 정수의 곱셈 연산 2의 보수에 의해서 부호를 갖는 2진수의 곱셈 0010 × 1001 음수를 양수로 변환하고 부호가 없는 곱셈을 수행하고, 만약 승수와 피승수의 부호가 서로 다르다면 결과 값에 2의 보수를 취하여 부호를 변경한다. 0010 × 1001 부호가 없는 2진수의 곱셈을 수행하기 위해서 음수 1001의 2의 보수를 구한다. 1001 → 0111 부호 없는 2진수의 곱셈을 수행한다. 피승수와 승수의 부호가 서로 다르므로 얻어진 결과를 다시 2의 보수화를 통해서 부호를 변경한다. 결과적으로 (-14)10를 얻게 된다. : 00001110 → 11110010
03 2진수의 연산 2진 정수의 나눗셈 연산 D ÷ V = Q … R 부호 없는 2진 정수의 나눗셈 나누어지는 수 D를 피제수(dividend)라고 하며, 나누는 수 V를 제수(divisor)라고 한다. 나눗셈의 결과로 몫(quotient) Q와, 나머지 수(remainder) R을 얻는다. 부호 없는 2진 정수의 나눗셈 10진수의 나눗셈과 동일하다. 10010011 ÷ 1011를 계산하는 과정 :
03 2진수의 연산 2진 정수의 나눗셈 연산 2의 보수를 사용하여 부호가 표현된 2진 정수의 나눗셈 연산 2의 보수를 사용하여 부호가 표현된 2진 정수의 나눗셈 연산 2의 보수를 통해서 모두 양수로 고친 다음 부호 없는 2진수의 나눗셈 수행 제수와 피제수의 부호가 다른 경우에는 몫을 부호를 변경한다. 예) 0111 ÷ 1101 1101은 음수이므로 2의 보수화를 통해서 양수를 구한다. 부호가 없는 2진수의 나눗셈을 수행한다. 제수와 피제수가 동일하지 않으므로 얻어진 몫을 2의 보수로 표현한다. 0010 → 1110 따라서 몫은 (-2)10가 얻어진다.
03 2진수의 연산 부동소수점 수의 산술연산 부동소수점 수의 덧셈과 뺄셈 부동소수점 수의 산술은 가수와 지수의 연산을 분리해서 수행한다. 부동소수점 수의 덧셈과 뺄셈 지수들이 동일한 값을 같도록 일치, 가수의 소수점이 좌우로 이동한다. 다음으로 가수들 간의 덧셈과 혹은 뺄셈을 수행한다. 2진수의 경우, 마지막으로 결과를 정규화한다. 10진수의 부동소수점의 수의 덧셈과 뺄셈 A = 0.3×102, B = 0.2×103 덧셈 연산 : A + B = 0. 3×102 + 0.2×103 = 0.3×102 + 2×102 = 2.3×102 뺄셈 연산 : A - B = 0. 3×102 - 0.2×103 = 0.3×102 - 2×102 = - 1.7×102 2진수의 부동소수점 수의 덧셈과 뺄셈
03 2진수의 연산 부동소수점 수의 곱셈 10진수의 부동소수점 수의 곱셈 2진수 부동소수점 수의 곱셈 과정 가수끼리는 곱셈 연산을 수행하고 지수끼리는 덧셈을 수행한다. 10진수의 부동소수점 수의 곱셈 A = 0.3×102, B = 0.2×103 A × B = (0.3×102) × (0.2×103) = (0.3×0.2) × 102+3 = 0.06×105 2진수 부동소수점 수의 곱셈 과정 가수들을 곱하는 것과 지수들을 더하는 과정은 동일하며, 결과값을 정규화하는 것이 추가된다. (0.1011 × 23) × (0.1001 × 25) 가수 곱하기: 1011 × 1001 = 01100011 지수 더하기: 3 + 5 = 8 정규화: 0.01100011 × 28 = 0.1100011 × 27
03 2진수의 연산 부동소수점 수의 나눗셈 10진수의 부동소수점 수의 나눗셈 2진수 부동소수점 수의 나눗셈 가수부분은 나눗셈 연산을 수행하고, 지수부분은 뺄셈 연산의 수행한다. 10진수의 부동소수점 수의 나눗셈 A ÷ B = 0. 3 × 102 ÷ 0.2 × 103 = (0.3 ÷ 0.2) × 102-3 = 1.5× 10-1 2진수 부동소수점 수의 나눗셈 첫 번째로 가수들을 나눈다. 그리고 피제수의 지수에서 제수의 지수를 뺀다. 그리고 마지막으로 결과값을 정규화하는 과정을 추가 한다. (0.1100 × 25) ÷ (0.1100 × 23) 가수 나누기: 1100 ÷ 1100 = 1 지수 뺄셈: 5 - 3 = 2 정규화: 0.1 × 22
03 2진수의 연산 부동소수점 수의 연산 과정에서 발생 가능한 문제 지수 오버플로우(exponent overflow) 부동소수점의 수의 표현 범위에서 오버플로우와 언더플로우가 발생하는 영역이 존재, 연산의 결과가 이런 영역에 포함되면 오류가 발생한다. 지수 오버플로우(exponent overflow) 양의 지수값이 최대 지수값을 초과하여 발생하는 오류다. 수가 너무 커서 표현될 수 없음을 의미하는 것으로 +∞ 또는 -∞로 나타낸다. 지수 언더플로우(exponent underflow) 음의 지수값이 최대 지수값을 초과하는 경우다. 수가 너무 작아서 표현될 수 없음을 의미하므로 0으로 표시된다.
03 2진수의 연산 부동소수점 수의 연산 과정에서 발생 가능한 문제 가수 언더플로우(mantissa underflow) 가수의 소수점 위치 조정 과정에서 비트들이 가수의 우측 편으로 넘치는 경우로서 반올림(rounding)을 사용해서 문제를 해결한다. 가수 오버플로우(mantissa overflow) 같은 부호를 가진 두 가수들을 덧셈하였을 때 올림수가 발생하는 경우로 재조정(realignment) 과정을 통하여 정규화하여서 해결한다.
03 2진수의 연산 3.2 2진수의 논리 연산 기본적인 논리 연산 AND 연산 OR 연산 Exclusive-OR(XOR) 연산 논리 연산은 주어진 명제에 대하여 참(true)과 거짓(false)를 결정하는 연산이다. 컴퓨터와 같은 디지털 장치에서는 많은 산술 연산뿐만 아니라 다양한 논리 연산을 지원하고 있다. 기본적인 논리 연산 AND 연산 2진수의 모든 입력이 모두 1일 때, 1을 출력하고 나머지의 경우에는 0을 출력 한다. OR 연산 2진수의 입력 중 하나만 1이면, 1을 출력하고, 모든 입력이 0일 때는 0을 출력한다. Exclusive-OR(XOR) 연산 2진수의 입력이 모두 동일할 경우에는 0이고, 나머지의 경우에는 1이 된다. NOT 연산 입력에 반대를 출력하는 연산이다.
03 2진수의 연산 기본적인 논리연산의 진리표
03 2진수의 연산 컴퓨터 응용 논리 연산(1) 선택적-세트(Selective-set) 연산 2진수의 특정 비트를 선택하여서 1로 세트시키는 연산이다. 데이터 A가 1001 0010일 때, 하위 4비트 모두를 1로 세트하려고 한다. 데이터 B를 0000 1111로 하고 A와 OR 연산을 수행한다. 그러면 원하는 결과를 얻는다.
03 2진수의 연산 컴퓨터 응용 논리 연산(1) 선택적-보수(Selective-complement) 연산 2진수의 특정 비트를 1의 보수로 변경 시키는 연산. 즉, 지정된 비트가 반전된다. 데이터 A의 특정 비트들을 1의 보수로 나타내기 위해서, 원하는 특정 비트위치가 1로 세트된 데이터 B와 XOR 연산을 수행한다. 데이터 A의 하위 4비트를 비트반전 시키기 위해서, 데이터 B를 0000 1111로 하고 데이터 A와 XOR 연산을 수행한다.
03 2진수의 연산 컴퓨터 응용 논리 연산(2) 마스크(Mask) 연산 원하는 비트들을 선택적으로 clear(0)하는데 사용하는 연산이다. 데이터 A의 특정 비트들을 0으로 바꾸기 위해서, 원하는 특정 비트위치가 0로 세트된 데이터 B와 AND 연산을 수행한다. 데이터 A의 상위 4비트를 0으로 clear하기 위해서, 데이터 B를 0000 1111로 하고 A 레지스터와 AND 연산을 수행한다
03 2진수의 연산 컴퓨터 응용 논리 연산(2) 삽입(Insert) 연산 2진 데이터내의 특정 위치에 새로운 비트 값들을 삽입하는 연산이다. 마스크 연산과 선택적 세트연산을 순차적으로 수행함으로써 완성된다. 삽입할 비트 위치들에 마스크 연산, 새로이 삽입할 비트들과 OR 연산을 수행하낟. 데이터 A = 1011 1010의 하위 4비트에 1100을 삽입하는 경우다.
03 2진수의 연산 컴퓨터 응용 논리 연산(3) 비교(compare) 연산 두 데이터를 비교하는 연산으로 exclusive-OR 연산에 의해서 구현된다. 데이터 A와 B의 내용을 비교 만약 대응되는 비트들의 값이 같으면, 데이터 A의 해당 비트를 0으로 세트 한다. 서로 다르면, 데이터 A의 해당 비트를 1로 세트다. A =1110 0001과 B=0101 1001과를 비교 연산의 결과는 두 데이터가 같으면 0을 출력하고 다르면 1을 출력한다.
03 2진수의 연산 컴퓨터 응용 논리 연산(4) 순환 이동(Circular Shift) 최상위 혹은 최하위에 있는 비트가 반대편 끝에 있는 비트 위치로 이동해서 비트가 회전한다. 순환 좌측-이동(circular shift-left) : 최상위 비트인 D4가 최하위 비트 위치인 D1으로 이동한다. 순환 우측-이동(circular shift-right): 최하위 비트인 D1 이 최상위 비트 위치인 D4로 이동한다.
03 2진수의 연산 컴퓨터 응용 논리 연산(5) 산술적 이동(arithmetic shift) 이동 과정에서 부호 비트는 유지하고, 수의 크기를 나타내는 비트들만 이동한다. 산술적 좌측-이동 D4 (불변), D3 ← D2, D2 ← D1, D1 ← 0 산술적 우측-이동 D4 (불변), D4 → D3 , D3 → D2, D2 → D1 산술적 이동 예 A = 1 0 1 0 1 1 1 0 : 초기 상태 1 1 0 1 1 1 0 0 : A의 산술적 좌측-시프트 결과 1 1 0 1 0 1 1 1 : A의 산술적 우측-시프트 결과
04 문자 데이터의 표현 영숫자 코드(Alphanumeric Code) 컴퓨터에 사용되는 영문자와 숫자, 특수문자의 데이터를 0과 1의 조합으로 구성된 코드로 표현한 것이다. 4.1 표준 BCD(Binary Coded Decimal) 코드 이진화 십진 코드라고도 부르며, 기본적으로 6비트의 길이를 갖는 코드이지만 좀 더 효율적으로 사용하기 위해서 존(zone)비트와 숫자(digit)비트로 분리하고 이를 조합해서 코드를 생성한다. 6비트의 표준 BCD 코드의 구성 가장 왼쪽의 최상위 비트는 패리티(parity) 비트다. 그래서 실질적으로 64(26)가지의 문자, 숫자, 특수문자의 정보를 표현할 수 있다. 존 비트는 숫자를 2진 부호로 밀도 높게 표현할 때 사용되는 숫자 4비트 외의 비트다. 그래서 6개의 비트가 각 문자를 나타내는데, 왼쪽의 두 비트의 존 비트는 알파벳이나 특수 문자를 나타내기 위해 숫자 비트와 연관해서 사용할 수 있다
04 문자 데이터의 표현 존 비트에 따른 표준 BCD 코드 분류
04 문자 데이터의 표현 표준 BCD 코드의 표
04 문자 데이터의 표현 4.2 ASCII 코드 ASCII코드의 구성 미국 국립 표준 연구소(ANSI)가 제정한 정보 교환용 미국 표준 코드 (American Standard Code for Information Interchange)다. 코드의 길이는 7비트와 패리티 비트가 추가된 두 종류의 8비트 코드가 있으 며, 128(= 27)가지의 정보를 표현 할 수 있다. ASCII 코드는 128개의 가능한 문자조합을 제공하는 7비트(bit) 부호로, 처음 32개의 부호는 인쇄와 전송 제어용으로 사용한다. 보통 기억장치는 8비트(1바이트, 256조합)를 기본으로 구성되고, ASCII 코드는 단지 7비트의 128개의 문자만 사용하기 때문에 나머지 하나의 비트를 추가하여 패리티 비트로 사용하거나 특정문자를 표현하는데 사용한다. 이렇게 하나의 비트가 추가되어 8비트의 코드로 특정문자까지도 표현할 수 있도록 만든 것을 확장 ASCII 코드라고 한다. ASCII코드의 구성
04 문자 데이터의 표현 존 비트에 따른 ASCII코드의 분류
04 문자 데이터의 표현 표준 ASCII 코드표
04 문자 데이터의 표현 확장 ASCII 코드표