Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

이진수의 1의 보수와 2의 보수, 개념부터 코드까지 한 번에 정리

이진수(Binary Number)란?

이진수는 밑(base)이 2인 수 체계로, '0'과 '1' 두 개의 숫자만 사용해 값을 표현합니다. 컴퓨터가 내부적으로 데이터를 저장하고 연산하는 가장 기본적인 방식이기도 하죠.

이진수에서 각 자릿수 하나하나를 비트(bit)라고 부르며, 일반적으로 8개의 비트를 묶어 바이트(byte)라고 합니다.

이진수 예시: 0100010111

1의 보수(1's Complement)

1의 보수는 이진수의 각 비트를 반전시켜 구합니다. 즉, 1은 0으로, 0은 1로 바꾸면 됩니다.

예제:

101100의 1의 보수 = 010011

2의 보수(2's Complement)

2의 보수는 1의 보수에 1을 더한 값입니다. 즉, 1의 보수 + 1로 계산할 수 있습니다.

2의 보수는 컴퓨터에서 음수를 표현하는 표준 방식으로 사용됩니다. 별도의 뺄셈 회로 없이 덧셈 회로만으로 음수 연산까지 처리할 수 있어 매우 효율적이기 때문입니다.

예제:

101101의 2의 보수 = 010011

구현 예제 코드

다음은 C++로 1의 보수와 2의 보수를 구하는 코드입니다. 먼저 모든 비트를 반전시켜 1의 보수를 만들고, 그 결과의 최하위 비트부터 올라가며 처음 만나는 0을 1로 바꾸면 2의 보수가 완성됩니다.

#include <iostream>
#include <string.h>
using namespace std;

int main() {
    char binary[10] = "01001011";
    cout << "Binary number is " << binary;

    // 1의 보수 계산: 비트 반전
    int length = strlen(binary);
    for (int i = 0; i < length; i++) {
        if (binary[i] == '0') {
            binary[i] = '1';
        } else {
            binary[i] = '0';
        }
    }
    cout << "One's Complement is " << binary << endl;

    // 2의 보수 계산: 1의 보수에 1 더하기
    for (int i = length - 1; i >= 0; i--) {
        if (binary[i] == '0') {
            binary[i] = '1';
            break;
        } else {
            binary[i] = '0';
        }
    }
    cout << "Two's complement is " << binary;

    return 0;
}

실행 결과

Binary number is 01001011
One's complement is 10110100
Two's complement is 10110101

정리

1의 보수는 단순히 모든 비트를 뒤집으면 되고, 2의 보수는 여기에 1을 더해 구합니다. 특히 2의 보수는 컴퓨터에서 음수 표현과 산술 연산의 기반이 되는 핵심 개념이므로, 디지털 논리 설계나 프로그래밍을 공부한다면 반드시 익혀두어야 합니다.