봉황대 in CS

[Chapter 2. 명령어: 컴퓨터 언어] 이진수와 2의 보수 표현법, 부호확장, 16진수 본문

Computer Science & Engineering/Computer Architecture

[Chapter 2. 명령어: 컴퓨터 언어] 이진수와 2의 보수 표현법, 부호확장, 16진수

등 긁는 봉황대 2022. 8. 17. 21:39

* 본 글은 '컴퓨터 구조 및 설계: 하드웨어/소프트웨어 인터페이스(Computer Organization and Design: The Hardware/Software Interface) 5th edition'의 내용과 2021학년도 1학기에 수강한 '컴퓨터 구조' 과목 강의 내용을 함께 정리하여 작성하였습니다.

 

이진수


컴퓨터 내에서는 일련의 높고 낮은 전기 신호의 형태로 숫자를 저장한다.

이는 기수가 2인 수로 볼 수 있고, 기수가 2인 수는 이진수라고 부른다. (0과 1로만 이루어진 수)

 

모든 정보는 이진 자리수, 즉 비트(bit)로 구성되므로 비트가 계산의 기본 단위가 된다.

* 이진 자리수(binary digit) : 이진수의 두 숫자 0과 1 중 하나. 정보의 기본적 구성 요소이다.

 

MIPS 워드(word)의 길이는 32비트이므로 2^32가지의 서로 다른 32비트 패턴을 표현할 수 있다.

 

 

n자리 이진수는 다음과 같이 십진수로 변환할 수 있으며, 표현할 수 있는 수의 범위는 0 ~ 2^n -1이다.

(32비트의 경우 0 ~ +4,294,967,295)

 

 

이들은 양수로, 부호없는 수(Unsigned Binary Integers)라고 부른다.

 

 

그렇다면 컴퓨터에서는 음수를 어떻게 표현할까?

컴퓨터 프로그램은 양수와 음수를 모두 계산하기 때문에 둘을 구분하는 표현방법이 필요하다.

 

컴퓨터는 2의 보수 표현법을 사용하여 음수를 표현한다.

 

2의 보수 표현법 (2s-Complement Signed Integers)


가장 앞쪽의 비트, MSB(Most Significant Bit)를 부호 대신하여 사용하는 것이다.

최상위 비트(MSB)를 부호 비트라고도 부른다.

 

MSB가 0이면 양수, 1이면 음수이며, 표현할 수 있는 수의 범위는 -2^(n-1) ~ 2^(n-1) - 1 이다.

(32비트의 경우 -2,147,483,648 ~ +2,147,483,647)

 

* 2의 보수에는 대응되는 양수가 없는 음수가 존재한다. : -(-2^(n-1))

 

 

2의 보수 표현법에서 가장 작은 수는 1000 0000 ... 0000, 가장 큰 수는 0111 1111 ...1111이 된다.

 

* 0 : 0000 0000 ... 0000

* -1 : 1111 1111 ... 1111

 

 

2의 보수 이진수를 역부호화하는 가장 빠른 방법은

모든 비트를 반대로 바꾸고(0→1, 1→0) 1을 더해주는 것이다.

 

 

 

(예시)

 

부호확장 (Sign Extention)


컴퓨터의 word 크기는 정해져있다.

* word는 어떤 데이터를 처리해주는 기본적인 데이터의 크기

 

하지만 간혹 컴퓨터의 처리 과정 중 현재 가지고 있는 데이터의 크기보다 더 많은 bit가 요구되는 경우가 발생한다.

즉, n 비트로 표현된 이진수를 n 비트보다 큰 수로 확장해서 넣어주어야 하는 것이다.

 

예를 들어 load, store, branch, add 등 명령어의 수치 필드에는 2의 보수 16비트 이진수가 들어간다.

이 값을 32비트 레지스터와 더하려면 컴퓨터는 16비트 수를 32비트 수로 변환하여야 하는 것이다.

 

 

이 경우에는 부호확장(Sign Extention)을 한다.

 

1. 최상위 비트(부호 비트)를 비어 있는 왼쪽 부분에 채우고,

2. 원래의 비트 값은 오른쪽 부분에 그대로 복사하는 것이다.

 

 

(예시) 8 bit → 16 bit

+2 : 0000 0010 → 0000 0000 0000 0010

-2 : 1111 1110 → 1111 1111 1111 11110

 

16진수 (Hexadecimal)


거의 모든 컴퓨터의 데이터 길이는 4의 배수이므로 16진수가 많이 사용된다.

 

16진수는 0~15를 한자리로 표현하는 수이며,

2진수를 4비트마다 끊어서 계산하면 16진수로 쉽게 변환할 수 있다.

 

 

(예시) 2진수 → 16진수

1110 1100 1010 1000 0110 0100 0010 0000 → 0xeca86420

* 0x는 16진수임을 나타내는 표기

 

 

반응형
Comments