[계산기 구조] 3. 정수 데이터 표현

정수의 부호
첫 번째 비트가 0이면 부호가 없는 정수(0과 양의 정수)
첫 번째 비트가 1이면 부호가 있는 정수(음의 정수)

양의 정수
첫 번째 비트는 0
나머지 비트는 크기입니다.
예) 01001010
맨 앞의 0은 부호, 1001010은 크기
이진수 1001010 = 2의 6승 + 2의 3승 + 2의 1승 = 64 + 8 + 2 = 74

음의 정수
첫 번째 비트는 1
부호 및 크기 방식, 1진 보수 방식, 2진 보수 방식에 따라 표현하는 방법이 다릅니다.

부호 및 크기 방식(Signed Magnitude)
부호 비트를 제외한 나머지 비트는 크기를 나타냅니다.
예) 11001010
맨 앞의 1은 부호, 1001010은 크기
이진수 1001010 = 2의 6승 + 2의 3승 + 2의 1승 = 64 + 8 + 2 = 74
따라서 -74
단점: 10000000 은 크기가 0이고 부호가 있는 -0 입니다. 따라서 00000000 과 10000000 두 가지 0이 존재합니다.

1진 보수(Signed 1’s Complement)
부호 비트를 제외한 나머지 비트를 1진 보수를 취한 값이 크기를 나타냅니다.
예) 11001010
맨 앞의 1은 부호, 1001010의 1진 보수는 크기
1진 보수를 취할 때는 0은 1로 1은 0으로 변환합니다.
따라서 이진수 1001010의 1진 보수는 0110101 입니다.
이진수 0110101 = 2의 5승 + 2의 4승 + 2의 2승 + 2의 0승 = 32 + 16 + 4 + 1 = 53
따라서 -53
단점: 11111111의 맨 앞의 1은 부호, 1111111의 1진 보수는 0000000이어서 크기가 0
따라서 00000000 과 11111111 두 가지 0이 존재합니다.
연산방법
자리올림이 발생하면 결과에 자리올림한 수를 더합니다.
예: 01110011 + 11000101 은 아래 그림처럼 연산하여 00111001입니다.

1진 보수 방식의 덧셈
1진 보수의 덧셈

2진 보수(Signed 2’s Complement)
부호 비트를 제외한 나머지 비트를 2진 보수를 취한 값이 크기를 나타냅니다.
예) 11001010
맨 앞의 1은 부호, 1001010의 2진 보수는 크기
2진 보수를 취할 때는 1진 보수를 취한 후에 1을 더합니다.
따라서 이진수 1001010의 1진 보수는 0110101 입니다. 따라서 2진 보수는 0110110입니다.
이진수 0110110 = 2의 5승 + 2의 4승 + 2의 2승 + 2의 1승 = 32 + 16 + 4 + 2 = 54
따라서 -54
장점: 0이 한 가지만 존재합니다.
연산방법
자리올림이 발생한 것을 무시합니다.
예: 01110011 + 11000101 은 아래 그림처럼 연산하여 00111000입니다.

2진 보수의 덧셈
2진 보수의 덧셈

1진 보수 방식과 2진 보수 방식에서는 뺄셈 연산을 덧셈으로 회로를 이용하여 계산합니다.

10진법의 데이터를 표현하기 위한 방법으로 Pack과 Unpacked 연산을 사용하는 방법도 있습니다.
Pack은 데이터 입출력은 불가능하며 연산은 가능합니다.
Unpack은 데이터 입출력에 사용할 수 있고 연산은 불가능합니다. Zone 스타일의 10진 연산이라 부릅니다.

Pack 연산
4비트로 10진수 1자리를 표현하면 최하위 4비트는 부호로 사용
양수의 부호는 1100, 음수의 부호는 1101로 표현, 부호없는 정수 표현에서는 최하위4비트를 1111로 표현
예)
1234 => 0000 0001 0010 0011 0100 1100
-1234=> 0000 0001 0010 0011 0100 1101

Unpacked 연산
1바이트에 1개의 정수를 표현합니다.
상위 4비트는 무조건 1111을 표현하는 Zone 영역이며
하위 4비트는 크기를 나타냅니다.
최하위 1바이트의 Zone영역에 부호를 표현하며 양수는 1100, 음수는 1101, 부호없는 양수는 1111로 표현합니다.
예)
1234 => 1111 0001 1111 0010 1111 0011 1100 0100
-1234 => 1111 0001 1111 0010 1111 0011 1101 0100