지니의 따듯한 공간
데이터의 표현과 컴퓨터 연산 본문
이번 단원이 산업기사 시험칠때 많이 나오는 부분이다 !
보수의 개념
보수 : 컴퓨터에서 보수는 음수를 표현하는 데 사용한다.
수(數)의 분류
/ 분수와 소수는 근본적으로 같다.
< 보수(補數)의 정의 >
어원적 의미
- 상호 보완하는 수로, 임의의 수를 보완해주는 다른 임의의 수다.
ex) 6에대한 10의 보수 = 10 - 6 -> 4 // 10의보수는 각 자리가 0이 되게끔 보완
8의 보수 = 8 - 6 -> 2
진법에서 정의되는 보수(complementary number)
- 두 종류로 정의된다.
- (r-1)의 보수, 진보수라고 하는 r의 보수로 정의된다.
ex) 10진수에서는 9의 보수와 10의 보수가 존재
2진수에서는 1의 보수와 2의 보수가 존재
보수(補數)의 정의
r진법에서 (r-1)의 보수
- A라는 수에 B라는 수를 더한 결과값의 각 자리가 (r-1)이 될 때,
B를 A에 대한 (r-1)의 보수라고 정의한다.
•예) 10진수 (237)10에 대한 9의 보수를 B라고 하면
237 + B = 999 → 237 + B = (1000-1) → B = (1000-1) -237 = 762
r진법에서 r의 보수
A라는 수에 B라는 수를 더해서 각 자리마다 자리올림이 발생하고 해당 자리는 0이 될 때, B를 A에 대한 r의 보수라고 정의한다.
•예) 10진수 (237)10에 대한 10의 보수를 B라고 하면
237 + B = 1000 → B = 1000 -237 = 763
r진수에서 (r-1)의 보수
r진법에서 임의의 정수 (N)r이 자릿수가 n개로 구성될 때, (r-1)의 보수 정의를 수식으로 표현하면 다음과 같다.
(rn - 1) - N
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 = (27 - 1) – 1011001 = 1111111 - 1011001 = (0100110)2
1의 보수 : 각자리가 1이 되는 수 !
1의 보수는 그냥 반대로~ 하자~
2의보수 = 1의보수 +1 ㅎㅎㅎㅎ
데이터의 2진수 표현
일반적인 디지털 장치에서는 2진수로 양의 정수, 음의 정수, 소수를 표현
2진수는 0, 1, 부호 및 소수점의 기호를 이용하여 수를 표현
부호가 있고 소수점을 포함하는 동일 값의 10진수와 2진수를 나타낸 예
ex) (-13.625)10 = (-1101.101)2
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
부호화-크기 표현
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
2 의 보수 사용하는 이유
컴퓨터는 -0과 +0을 구분 못한다 ! 부호비트가 다른것 뿐인데.. ㅠ ㅠ 바보 컴퓨터야
두개를 같다 라고 인식시키는 하드웨어 로직을 열어놔야지, 컴퓨터가 두 수가 같다는걸 안다.
-> 그래서 부호비트 따로 체크하고,
->크기비트 따로 체크해야하니까 복잡하니까
-> 그냥 2의보수로 표현
-> 2의보수는 0이 2개가 아니니까~ ^-^
2의보수로 계산하면 -0이아니라 표현할 수 있는 가장 작은 음수로 바뀌기때문에, -0이라는게 없어진다
-> 그래서 부호비트 판단할 필요없다~!
-> 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진수를 표현하는데 사용한다.
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
뺄셈 -> 2의보수를 더해 줄 때에는 자리올림을 없애준다 !
2 - 4 = 2 + ( -4 )