-
음수 표현(feat.2의 보수)개발/C·C++ 2021. 4. 3. 20:51
2의 보수는 대부분의 산술 연산에서 원래 숫자의 음수처럼 취급됩니다. 2의 보수를 쉽게 구하는 방법은 이진수로 표현된 숫자의 1의 보수를 구한 뒤(각 비트를 반전) 1을 더하는 것입니다. 어렵게 구하는 방법은 8자리 이진수가 있다고 할 때 256(2^8->시작 비트가 2^0부터 시작하므로 9자리 수)에서 해당 수를 뺍니다. 컴퓨터 과학에서는 빼기 연산을 음수를 더하는 방법으로 표현하므로 음수를 구하고 나서 더하는 연산을 합니다.
출처: 위키백과 bit.ly/3mir6SP
십진수 6을 예로 들겠습니다. 6의 이진수는 0000 0110입니다. -6을 구해보겠습니다. 먼저 1의 보수를 구합니다. 1111 1001입니다. 여기에 1을 더하면 1111 1010입니다. 원래의 수인 0000 0110과 덧셈 연산을 하면 0이 나오기 때문에 제대로 구했습니다.
signed 정수는 최상위비트가 MSB로 음수를 표현합니다. 따라서 MSB에 1이 있으면 음수입니다. 음수값을 구할 때는 2의 보수를 구해서 절대값을 확인하는 것이 빠릅니다. -6을 예로 들겠습니다. -6을 이진수로 표현한 1111 1010의 2의 보수를 구하면 0000 0110입니다. 6이므로 1111 1010이 -6임을 쉽게 알 수 있습니다. 다음과 같이도 계산할 수 있습니다. MSB가 음수를 나타내면서 동시에 값을 가진다고 말이죠. 1111 1010를 비트 단위로 값을 구해보면 -128 + 64 + 32 + 16 + 8 + 2 = -6입니다.
'개발 > C·C++' 카테고리의 다른 글
[Cache] 시간 지역성, 공간 지역성 (0) 2021.04.08 'if' you wanna 'switch' something (0) 2021.04.06 Sequence point (0) 2021.03.30 [cin] 입력 실패를 처리하는 법 (0) 2021.03.29 가상 함수와 가상 함수 테이블 (0) 2019.12.11