0
#include <stdio.h>
main(){
printf("Give a number in decimal form\n");
int Division,a=1,sum=0,Bit,Digit;
scanf("%d",&Division);
do{
Digit= Division%2;
if (Digit==1){
sum++;
}
Division/=2;
Bit += Digit*a;
a*=10;
}while(Division>0);
printf("%d is the number in binary form\n",Bit);
printf("The number of 1s in the binary form is %d",sum);
}
연습의 목적은 10 진수를 이진 형식으로 변환하고 1을 계산하는 것입니다. 그것은 1023까지 잘 작동하지만 1024에서는 10 진수를 포함하는 "2 진"숫자를 인쇄합니다. 1 카운트가 올바르게 작동합니다. 범위와 관련하여 문제가 있습니까?C에서 이진수로 이진수로 오류가 발생했습니다.
예, 아마 'int Bit;'가 넘칠 것입니다. '길다'로 설정하면 시간을 절약 할 수 있지만 문자열로 조합하는 것이 좋습니다. 나는 그것이 C에서했던 것보다 쉽다는 것을 깨닫는다. 큰 버퍼를 할당하십시오 - 33 문자 (= 32 비트 + 1은 nul) - 그리고 그것을 뒤쪽으로 쓰고 33을 오버플로하지 않았는지 확인하십시오. – Rup
** 당신의 코드를 ** 디버그 **하고 변수의 중간 값을 검사한다면 그런 다음 정수 오버플로가 있음을 신속하게 인식해야합니다. –
시작하기 전에 비트를 0으로 초기화해야합니다. –