728x90
이 포스트는 이전 블로그에서 이전한 포스트입니다.

 

(C/C++) 1의 보수 구하기 (1의 보수 소스)

 

1의 보수는 전체 비트를 1로 채워 절대치 표현 값을 뺀 것입니다.

즉, 

     11111

   - 00110

 ------------

     11001

과 같습니다.

 

이는 모든 자릿수를 1은 0으로, 0은 1로 뒤집어서 표현하는 방법을 사용하면 쉽습니다.

(즉, 반전을 이용할 것)

 

본격적으로 소스를 보면 아래와 같습니다.

이는 10진수를 받아 1의 보수를 구하는 과정입니다.

재귀 함수를 이용하여 10진수를 2진수로 변환하는 과정을 이용하였으며,

각각 자리를 반전시켜서 출력하였습니다.

 

#include <iostream>
using namespace std;

void complement(int n);
int main(void)
{
    int input;
    cout << "숫자를 입력하세요.(10진수): ";                                   
    cin >> input;

    if (input < 0)
    {
        cout << "잘못된 입력입니다.";
        return 0;
    }

    cout << "변환 후: ";
    complement(input);
    cout << endl;
    return 0;
}

void complement(int n)
{
    int tmp;
    if (n <= 1)
    {
        cout << !n;
        return;
    }
    tmp = n % 2;
    complement(n / 2);
    cout << !tmp;
}

 

결과 예제는 아래와 같습니다.

십진수 10은 2진수로 1010이고, 이를 반전하면 0101이 됩니다.

즉, 십진수 10의 1의 보수는 0101입니다.

 

728x90

+ Recent posts