[Algorithm] 입력받은 2진수의 보수 구하기
- ETC./Algorithm
- 2019. 7. 3.
입력받은 이진수의 보수구하기
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");
}
'ETC. > Algorithm' 카테고리의 다른 글
[Algorithm] 입력받은 그레이코드를 2진수로 변환하기 (0) | 2019.07.06 |
---|---|
[Algorithm] 입력받은 2진수를 그레이코드로 변환하기 (0) | 2019.07.05 |
[Algorithm] 입력받은 10진수를 2진수로 변환하기(진법변환) (0) | 2019.06.12 |
[Algorithm] 입력받은 수를 소인수 분해하기 (0) | 2019.06.11 |