CS/컴퓨터구조

이진수의 음수 표현 / 플래그

민톨이 2025. 5. 1. 22:27
728x90

이진법이란, 0과 1만으로 모든 숫자를 표현하는 방법을 말한다.

 

원리는 숫자가 1을 넘어가는 시점에 자리 올림을 하면 된다. 아래는 그 예시이다

십진수 이진수
1 1
2 10
3 11
4 100
5 101
6 110
7 111

 

이런식으로 0과 1만으로 수를 표현한다.

 

그러나 1, 10, 11 이런식으로만 쓰면 십진수인지 이진수인지 구분할 수 없다.

 

이진수를 정확히 표기하기 위에서는 뒤에 (2)를 붙이거나 앞에 0b를 붙이면 된다.

 

ex) 101(2)   / 0b101

 

그렇다면 이진수의 음수는 어떻게 표현할 수 있을까?

 

십진수로 음수를 표현하기 위에서는 앞에  "-"부호만 붙여주면 된다.

 

하지만 컴퓨터는 0과 1만 이해할 수 있기 때문에 이러한 방식으로는 표현할 수 없다.

 

이러한 상황에서 2의 보수를 구해 이 값을 음수로 간주한다.

 

(2의 보수: 어떤 수를 그보다 큰 2^n 에서 뺀 값)

 

       + 이진수는 기본적으로 양수만 표현할 수 있기 때문에, 컴퓨터는 2의 보수(Two’s Complement)라는 기법을 사용하여 음수를 나타내는 것이다

 

           - 2의 보수를 사용하면 양수와 음수 모두를 동일한 회로로 처리할 수 있어 하드웨어적으로 효율적이다.

 

쉽게 표현하면 모든 0과 1을 뒤집은 후 1을 더한 값이라고 보면 된다.

 

예를 들어 1111(2)를 음수로 표현하려면

 

각 1을 0으로 바꿔주고 뒤에 1만 더해주면 된다.

 

 

1111(2) ---->   0000(2) ------> 0001(2)가 되는 것이다.

 

하지만 저렇게만 봐서 음수인지 어떻게 식별할 수 있을까?

 

플래그(flag)라는 것을 사용하여 음수와 양수를 구분할 수 있따.

 

플래그는 CPU 내부의 플래그 레지스터에 있으며 연산 결과에 대한 상태 정보를 나타낸다.

 

ALU가 내보내는 대표적인 플래그 중에 부호 플래그(Sign flag)가 존재하는데,

부호 플래그가 1일 경우 계산 결과는 음수이고 0일 경우의 계산 결과는 양수를 의미한다.

 

 

'CS > 컴퓨터구조' 카테고리의 다른 글

CPU 내 명령어 실행 흐름  (0) 2025.05.07