- ベストアンサー
2進数の表示
初心者なんですが、 2進数を出すプログラムを作成したところ、 "1011"のように表示したいのですが、プログラム結果"1101"となってしまいます。 最後に逆から表示するしかたがわかりません。 どのようにしたら逆に表示されるのか教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
どう組まれたのかが提示されれば答えやすいのですが。 通常2で割って余りを求めることを繰り返します。 余りを右端に埋めながら左シフトしていくとおっしゃる通りになります。 シフトしないで右端から順番に左に埋めていけば正しい答えになるはずです。 最後に反転する方法もありますがそれは最後の手段かと思います。
その他の回答 (4)
- ttyp03
- ベストアンサー率28% (277/960)
#3です。 暇だったので作ってみました。 #include <stdio.h> void main( void ) { unsigned long a; int i; char b[33]; a = 5; memset( b, 0x00, sizeof( b ) ); for( i = 0; i < 32; i++ ){ b[i] = '0' + ( ( ( a << i ) & 0x80000000 ) >> 31 ); } printf( "%s\n", b ); } #3さんのように冒頭の0を省く処理は入ってませんが、やるならフラグでも立てればいいでしょう。
お礼
ありがとうございます。 試してみます。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
ハナから頭から2進数表示に変換するサンプル ------------------------------------------ #include <stdio.h> #include <limits.h> char *itob(unsigned d, char *buff){ unsigned flag = (unsigned)INT_MIN; char *p=buff; while(0==(d & flag) && 0!=flag) flag>>=1; //頭の0スキップ while(0!=flag){ *p++=(d & flag) ? '1' : '0'; flag>>=1; } *p='\0'; if(*buff=='\0'){ *buff='0'; buff[1]='\0'; } return buff; } void main(void){ char buff[33];//int のサイズは4バイト? printf("%s\n",itob(11,buff)); printf("%s\n",itob( 0,buff)); printf("%s\n",itob(-1,buff)); }
お礼
ありがとうございます。 私には少し難しいのでもう少し勉強してからやってみます。
- ttyp03
- ベストアンサー率28% (277/960)
結局はやり方次第ですよ。 なので現状のやり方(プログラム)を提示してください。 その方が解決が早いですよ。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
文字列を反転する関数を作るのも1つの方法だと思います。 参考URL以外にもreverseで検索するといくつか引っかかります
お礼
ありがとうございます。 私のレベルでできそうな方法なのでやってみます。