IT 프로그래밍/논리회로

[논리회로] 2진수 음수 표현법 부호의 절대치 1의보수, 2의보수

기술1 2024. 4. 3. 14:57
반응형

0000(2) = 0

0001(2) = 1

0010(2) = 2

0011(2) = 3

0100(2) = 4

1110(2) = 14 

1111(2) = 15

 

이것이 2진수의 표현법입니다.

 

하지만 이런 2진수에서큰 문제점이 하나 있다면 바로 음수의 표현법인데요. 음수를 표현하기에 애매합니다. 그래서 음수를 표현할 때에는 총 3가지 방법을 쓰는데요. 바로 부호의 절대치와 1의보수, 2의보수가 있습니다. 

 

부호의 절대치

 

부호 비트만 양수와 음수를 나타내고 나머지 비트들은 같습니다. 

 

5의 절대치는 다음과 같습니다. 

5(10) = 0000 0000 0000 0000 0000 0000 0000 0101(2)

 

여기에서 -5를 표현하고 싶다면 최상위 비트가 0일때는 양수, 1일때는 음수를 사용합니다. 

 

-5(10) = 000 0000 0000 0000 0000 0000 0000 0101(2)

 

이런식으로 부호비트만 양수와 음수를 나타내고 나머지 비트들은 같습니다. 이 부호의 절대치 방법은 매우 직관적이며 이해하기 쉽지만 컴퓨터의 입장에서는 다소 어려운 점이 있을 수 있습니다. 

 

+0과 -0이 둘 다 존재하기 때문에 둘 다 0으로 인식하도록 설정을 따로 해주어야 한다는 단점과 연산 시 회로가 복잡해진다는 단점이 있습니다.

 

1의 보수

 

 0을 1로 변환, 1을 0으로 변환 

 

00000011 -> 11111100 

 

간단하게 이것이 1의 보수입니다. 0과 1의 비트를 반전해주면 되는데요. 1의 보수를 이용하면서 이전에 부호 절대값에서 문제가 되는 부호의 절대값을 따로 계산할 필요도 없어집니다. 회로 또한 단순한데요.

 

하지만 캐리가 발생하는 경우 처리해주어야 하는 단점과 -0과 0은 여전히 따로 인지할 수 있도록 코드를 짜줘야 하는 불편함이 존재합니다. 

 

2의 보수

 

1의 보수 + 1 = 2의 보수 

 

00000011 -> 11111100 -> 11111101 

 

1의 보수에 1을 더해준 것이 바로 2의 보수입니다. 그렇게 된다면-0이 나오는 값이 없어지겠죠? 

 

음수 영역에서 각 대응되는 수를 -1씩 대응시키는 것입니다.

 

이는 "어떤 수를 부호를 바꾸고 싶다면 비트를 반전한 후 1을 더한다."

 

이렇게 하면서 -0의 무제도 해결되면서 1의 보수에 1의 값을 플러스하면 음수 값을 얻을 수 있으며 MSB의 성질 또한 유지되는 장점이 있어서 장점이 가득한 보수가 됩니다.

 

 

반응형