
주변에 공무원 준비하는 사람이 있어서 전산학 기초를 잠시..
컴퓨터로 정수(integer)를 나타내는 방법은 그냥 2진수를 쓰면된다.
단, 양수인 경우만(데이터 타입이 unsigned일때)..
음수의 개념을 발견한건 사람한테도 비극이지만 이 개념을 컴퓨터로 옮기는데 또 한번의 시련이 온다.
음수, 별거 있나? 까지꺼 맨 앞 비트를 안 쓰기로 하고 대신 음수일때 표시를 위해 ‘1′을 주기로 하자.
즉, 8비트 자료형(byte)을 예로들면 원래 2^8=256가지 경우를 나타낼 수 있는데 1~256보다는 ‘0′도 쓰고 싶으니 0~255 까지의 값을 할당할 수 있다.
이번엔 음수를 표현가능하게 하기 위해 앞에 1비트를 사용하면 나머지 7비트만 사용 가능하니 크기(amount)는 2^7=128 가지가 사용가능하다. 즉, 0~127까지 나타낼 수 있다. 부호비트에 1을 주면 -127~-0 까지 표현 가능하다.
위의 방법이 가장 원초적으로 음수를 표현할 수 있는 방법이고 이를 ‘1의 보수’ 방법이라고 부른다.
난 ‘1의 보수’방식이 참 좋은데 ‘0 [00000000]’과 ‘-0 [10000000]’이 존재한다는 꼴(수학적으로는 의미가 없는)을 보기가 싫은 모양인가 보다. 그래서 ‘-0′을 안 쓰는 방법이 현대 컴퓨터에서 사용되는 ‘2의 보수’방법이다.
음수로도 128가지를 표현할 수 있기 때문에 ‘-0′이 하나 빠졌으니 대신 ‘-128′도 표현이 가능해 진다.
이를 ‘2의 보수’라 부르고 따라서 signed 자료형의 표현범위는 음수쪽이 양수쪽 보다 하나 더 크다(byte의 경우 -128~127).