#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進数を2進数に変換し、その1を数えることでした。1023までは問題なく動作しますが、1024では10進数を含む「2進数」を出力します。1カウントが正しく機能することに注意してください。範囲に問題はありますか?
1024の最後の(最上位)ビットに到達すると、の値a
は10000000000(10 ^ 10)になります。そうでないことを除いて。ためには、int
32ビット整数の値であり、a
オーバーフロー(2回)および1410065408てしまいます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加