한결과 레지아이스

TIL about Two’s Complement, 22/02/18 본문

Today I Learned/The Secret Life of Programs

TIL about Two’s Complement, 22/02/18

miniwho 2022. 2. 19. 18:01

오늘은 많이 볼 시간이 없어서 짧게 2의 보수 표현법에 대해서만 공부했습니다.

2의 보수 표현법은 비트로 음수를 표현하는 방법 중 하나입니다.

다른 표현법으로는 부호와 크기 표현법, 1의 보수 표현법이 있습니다.

그런데 부호와 크기 표현법은 덧셈 등 연산에 문제가 있고, 또 0과 -0으로 0의 표현법이 두 개 존재한다는 것도 문제입니다.

1의 보수 표현법도 0을 두 가지 방식으로 표현하고, MSB쪽에서 올림이 생기는 경우에 복잡해져서 문제가 있습니다.

그래서 현대 컴퓨터에선 이 두 표현법을 사용하지 않는다 합니다.

그 대신 사용하는게 2의 보수 표현법입니다.

평소에 코딩을 할 때, INT_MAX 값에 1을 더해 오버플로우를 일으키면 INT_MIN 값이 나오게 됩니다.

INT_MAX를 비트로 표현하면 0 1 1 ....... 1로, MSB를 제외한 모든 비트가 1입니다. 여기에 1을 더하게 되면 올림이 순차적으로 일어나 1 0 0 .... 0으로, MSB를 제외한 모든 비트가 0이 됩니다.

2의 보수 표현법에서는 이 값이 INT_MIN이 되게 됩니다. 왜 이렇게 하냐, 0의 표현법이 한 가지이기도 하지만, 연산이 쉬워서인 것 같습니다.

이 둘을 더하면 모든 비트가 1이 되고, 이 값이 -1이 됩니다. 여기에 1을 더하면..! 모든 비트가 0이 되고, 숫자는 0이 되게 됩니다!!!

오버플로우와 언더플로우가 당연한 것 같았지만, 막상 들여다 까보니 생각없이 당연하게 받아들일 내용은 아니었던 것 같다는 걸 배운 하루였습니다..

Comments