[Algorithm] 입력받은 2진수의 보수 구하기

입력받은 이진수의 보수구하기

1의 보수는 0은 1로 1은 0으로 변경하면 되고, 2의 보수는1의 보수에 1을 더하면 됩니다. 즉 01100의 1의 보수는 10011이고, 2의 보수는 10100입니다. 이 로직을 어떻게 알고리즘으로 구현하느냐가 관건인데요. 

1의 보수를  if문을 통해서 구해도 되지만 0은 1로, 1은 0으로 변환할때는 1에서 변환할 값을 그냥 빼주면 1의 보수를 좀 더 간편하게 구하실 수 있습니다. 2의 보수를 구할때는 1의 보수에 1을 더하면 되는데 이진수의 각자리가 배열의 각 요소에 분리되어 있으므로 맨 오른쪽 배열의 값에 1을 더해서 만약 맨 오른쪽 배열의 수가 1을 초과하면 앞자리 수로 1을 반올림 해줍니다.

 

보수구하기

 

C언어/C++ 코드

#include<stdio.h>
main()
{
	int a[5],b1[5],b2[5];
	int i=-1, c=1; 
	
	printf("5자리 이진수를 입력하세요\n");
	do{
		i++;
		scanf("%d",&a[i]);
		b1[i] = 1 - a[i];
	}while(i<4);
	
	do{
		b2[i] = b1[i] + c;
		b2[i] = b2[i] % 2;
		c = b1[i] * c;
		i--;
	}while(i>=0);
	
	//출력
	printf("1의보수 : ");
	for(int j=0;j<5;j++){
		printf("%d ",b1[j]);
	}
	printf("\n");
	
	printf("2의보수 : ");
	for(int j=0;j<5;j++){
		printf("%d ",b2[j]);
	}
	printf("\n");
}

보수구하기 결과

 

 

댓글

Designed by JB FACTORY