- ベストアンサー
2進数表示
以前にもお聞きしたんですが、 while (atai != 0) { amari = atai % 2; atai = atai / 2; /*表示*/ } と2進数の表示プログラムを作ったんですが、 シフト演算で表示するにはどうしたらよいか教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
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)
8bitの場合、とありますので、それ以外でも大丈夫な方法で maxbit = 1 << (sizeof(atai) * CHAR_BIT - 1) while(atai) { amari = atai & maxbit; atai <<= 1; (以下省略) とすれば、shortでもlongでもlonglongでも最上位ビットから取り出せますね。 # 2進数とか16進数とかの質問が多いぞ。 # なにか傾向があるんだろうなあ。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> 配列を使わずに表示させたいんですが・・・ ナゼ? 最も'単純'かつ'正しい'のに。
- OsieteG00
- ベストアンサー率35% (777/2173)
シフトする前に1とANDをとれば余りが出ます。 amari = atai % 2でも同じです。 シフトだけでは、余りは出ません。
- rinkun
- ベストアンサー率44% (706/1571)
思いっきりざっぱな方法ですけど。 printBin(signed int atai) { int i; for (i=0; i<32; i++) { if (atai<0) { /* 最上位ビットが立つと負 */ printf("1"); }else { printf("0"); } atai<<=1; } }
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> 表示するさいにシフト演算で余りを逆に表示させたいんですが、 > どうしたらいいですか? 配列か何かに順に保存しておいて、そいつをオシリから書けばいい。
- OsieteG00
- ベストアンサー率35% (777/2173)
atai = atai / 2; を atai = atai >> 1;
お礼
すいません。 参考URLに書いてありました。 後、表示するさいにシフト演算で余りを逆に表示させたいんですが、 どうしたらいいですか?
補足
> atai = atai >> 1; と変えるのはなぜですか?
補足
配列を使わずに表示させたいんですが・・・