• ベストアンサー

2進数の表示

初心者なんですが、 2進数を出すプログラムを作成したところ、 "1011"のように表示したいのですが、プログラム結果"1101"となってしまいます。 最後に逆から表示するしかたがわかりません。 どのようにしたら逆に表示されるのか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

どう組まれたのかが提示されれば答えやすいのですが。 通常2で割って余りを求めることを繰り返します。 余りを右端に埋めながら左シフトしていくとおっしゃる通りになります。 シフトしないで右端から順番に左に埋めていけば正しい答えになるはずです。 最後に反転する方法もありますがそれは最後の手段かと思います。

W07A09
質問者

お礼

ありがとうございます。 私のレベルでできそうな方法なのでやってみます。

その他の回答 (4)

  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.5

#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を省く処理は入ってませんが、やるならフラグでも立てればいいでしょう。

W07A09
質問者

お礼

ありがとうございます。 試してみます。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

ハナから頭から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)); }

W07A09
質問者

お礼

ありがとうございます。 私には少し難しいのでもう少し勉強してからやってみます。

  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.3

結局はやり方次第ですよ。 なので現状のやり方(プログラム)を提示してください。 その方が解決が早いですよ。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

文字列を反転する関数を作るのも1つの方法だと思います。 参考URL以外にもreverseで検索するといくつか引っかかります

参考URL:
http://okweb.jp/kotaeru.php3?qid=1438944

関連するQ&A