• ベストアンサー

2進数表示

以前にもお聞きしたんですが、 while (atai != 0) { amari = atai % 2; atai = atai / 2; /*表示*/ } と2進数の表示プログラムを作ったんですが、 シフト演算で表示するにはどうしたらよいか教えてください。

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.6

8ビット表示ですが void main() { unsigned char atai = 0xAA; unsigned char msb; int i; for(i = 0; i < 8; i++) { msb = (atai & 0x80) >> 7; atai = atai << 1; printf("%d", msb); } }

その他の回答 (6)

  • rentahero
  • ベストアンサー率53% (182/342)
回答No.7

8bitの場合、とありますので、それ以外でも大丈夫な方法で maxbit = 1 << (sizeof(atai) * CHAR_BIT - 1) while(atai) { amari = atai & maxbit; atai <<= 1; (以下省略) とすれば、shortでもlongでもlonglongでも最上位ビットから取り出せますね。 # 2進数とか16進数とかの質問が多いぞ。 # なにか傾向があるんだろうなあ。

回答No.5

> 配列を使わずに表示させたいんですが・・・ ナゼ? 最も'単純'かつ'正しい'のに。

  • OsieteG00
  • ベストアンサー率35% (777/2173)
回答No.4

シフトする前に1とANDをとれば余りが出ます。 amari = atai % 2でも同じです。 シフトだけでは、余りは出ません。

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.3

思いっきりざっぱな方法ですけど。 printBin(signed int atai) {  int i;  for (i=0; i<32; i++) {   if (atai<0) { /* 最上位ビットが立つと負 */    printf("1");   }else {    printf("0");   }   atai<<=1;  } }

回答No.2

> 表示するさいにシフト演算で余りを逆に表示させたいんですが、 > どうしたらいいですか? 配列か何かに順に保存しておいて、そいつをオシリから書けばいい。

W07A09
質問者

補足

配列を使わずに表示させたいんですが・・・

  • OsieteG00
  • ベストアンサー率35% (777/2173)
回答No.1

atai = atai / 2; を atai = atai >> 1;

参考URL:
http://www9.plala.or.jp/sgwr-t/c/sec14.html
W07A09
質問者

お礼

すいません。 参考URLに書いてありました。 後、表示するさいにシフト演算で余りを逆に表示させたいんですが、 どうしたらいいですか?

W07A09
質問者

補足

> atai = atai >> 1; と変えるのはなぜですか?

関連するQ&A