/*
---------------------------------
割 2 割 あ
る で っ ま
数 割 た り
数
a b c
7 ÷ 2 = 3 あまり 1
3 ÷ 2 = 1 あまり 1
----------------------------------
*/
#include
int main(void)
{
char buff[17]={' '};
int a=0,i=0,wa=0;
printf("10進(65535以下):"); scanf("%d",&a);
while(1)
{
wa = a; //入力した値を2で割った余りを計算するためコピーをとる
a = a / 2; //入力した値を2で割って代入(1かその他)
wa = wa % 2; //入力した値の2で割った余り(0か1)
if(a==0)
{
buff[i] = '0';
break;
}
if(wa==0) buff[i] = '0';
else buff[i] = '1';
if(a==1) //割った値が1ならば1を最上位ビットに。
{
if(buff[0]!=(0||1)) i+=1;
buff[i] = '1'; //1を最上位ビットに代入
break; //割った値が1→もう2で割れないから終了
}
i+=1; //iに1を加算
}
printf("%016s\n",buff);
return 0;
}
単純に2でわってその余りの数を記録して2進数に変換しようと思ったのですが、実際組んでみると、最初に1や0が入力されたらどう処理すれば良いのかといった処理に頭がこんがらがる…。
2進数で出力する関数が標準関数として無いだけで、処理自体はビット演算を用いることが出来るのだから、シフトして、0000 とかを&すれば、各ビットの値は取り出せるんじゃないのとか今更ながら思い始めた(マスキングというのでしたっけ...)
バイトから帰宅したらやってみようと思う!
また、皆様の意見などが聞けたら幸いに思います。
では、働いてきます。
追記:
このプログラムは、もし 3 が入力されたら、というのを仮定して組んでいました。
3の場合問題なく出力されますがそれ以外は正しく動作しません。