관리 메뉴

me made it !

[CS]컴퓨터가 음수를 표현하는 방법 본문

크래프톤 정글

[CS]컴퓨터가 음수를 표현하는 방법

yeoney 2024. 7. 20. 21:45
반응형

음수 표현 아이디어

  • 2의 보수 표현법
  • 정수 오버플로우란?

우선, 컴퓨터가 4비트만 기억한다고 가정하고 시작하자.

0111 : 7을 뜻하고
1111 : -7을 뜻한다. 

하지만, 이렇게 하면 0을 나타내는 방식이 두가지이다.

0000 : 0 
1000 : -0

이렇게 0을 표현하는 방법이 두 가지라면, 어떠한 데이터가 0인지 확인하기 위해 쓸데없는 컴퓨터 자원을 낭비하게 된다.

또 다른 문제는, 양수의 음수의 덧셈을 할 때 부호를 고려해서 수행해야한다. 예를 들어 0001과 1001 을 더할때 1001이 -1이므로 뺄셈을 수행해야 한다.

2의 보수 표현법

1001 :  -7의 이진수 표현 이다. 

이유는 0111과 1001을 더하면 10000이 되는데, CPU가 4비트만 기억하므로 앞에 1은 버려져서 그냥 0000이 되기 때문이다.

  • 참고로 두 개의 자료형을 더했을 때 범위를 벗어나는 비트는 그냥 버려지는 것이다. 마치 왼쪽으로 쉬프트 했을 때 맨 왼쪽에 있는 비트들이 버려지는 것을 생각하자.
쉽게 구하자면, 
7의 2진수 표현인 0111의 비트를 모두 반전시키면 1000이 된다.
여기다 1을 더해서 1001으로 표현하면 된다.

반대로 -7에서 7로 가고 싶다면 1001의 부호를 모두 반전 시킨뒤 0110 다시 1을 더하면 양수인 7이 나온다 !

여기서 중요한 점은 0000의 2의 보수는 그대로 0000이다. 왜냐하면, 0000을 반전하면 1111이 되는데, 다시 1을 더하면 0000이 되기 때문 !

또한 어떤 수가 음수인지 양수인지 판단하는 방법도 매우 쉽다. 그냥 맨 앞 비트가 부호 비트라고 생각하면 된다. 예를 들어 1101의 경우 맨 앞 비트가 1이기 때문에 음수이다. 따라서 이 수가 어떤 값인지 알고 싶다면 보수를 구한 뒤에 1101 → 0010 → 0011만 붙여주면 3인 것을 알수 있고, 1101은 -3이다 !

정리 :

  1. 음수나 양수 사이 덧셈 시에 굳이 부호를 고려하지 않고 덧셈을 수행해도 된다.
  2. 맨 앞 비트를 사용해서 부호를 빠르게 알아낼 수 있다.

 

 

 

https://modoocode.com/308

 

씹어먹는 C 언어 - <4 - 2. 컴퓨터가 음수를 표현하는 방법 (2의 보수)>

컴퓨터 상에서 정수인 음수를 표현하기 위해서 2 의 보수 표현법을 사용합니다. 이에 따라 int 상에서 오버플로우가 발생하였을 때 양수에서 값을 증가시켰더니 음수로 바뀌는 기적을 볼 수 있습

modoocode.com

 

반응형

'크래프톤 정글' 카테고리의 다른 글

[C언어] Go to 문  (0) 2024.07.20
[Python] read(), readline(), readlines()의 차이  (0) 2024.07.19
[Python] For else 구문이 뭐야?  (0) 2024.07.17
[알고리즘] DFS 와 BFS  (0) 2024.07.13
[Python] strip() 과 split() 의 차이  (1) 2024.07.12