10進数を2進数32bitで表示させるプログラムを作りたいです。(負の値は2の補数で表す)
4行目の変数宣言時31bitまではきちんと動くのですが32bit(今の状況)になると無限ループになってしまいます。
この原因がわからず迷走している状態です。原因がわかる方教えて頂けないでしょうか?
#include <stdio.h> void PrintBitC( int c) { int bit = ( 1 << 31 ); while (bit != 0) { if (c & bit) { putchar('1'); } else { putchar('0'); } bit = bit >> 1; } } int main() { int c = 0; scanf("%d",&c); fflush(stdin); PrintBitC(c); puts("\n"); getchar(); return 0; }
先のご質問が閉じていないようですが、理解されていますでしょうか。(まずこちらからです)
[バイトを8bitで表示] https://teratail.com/questions/341361
(1 << 31)で「1を31ビット分左シフト」させる意味ので、2進数32ビットで既に表示できているはずです。質問者さんが32ビットと言っているのは (1 << 32)と書きたいとのことだと思いますが、それは33ビット分の数値です。
他回答者さんの回答を読んで当質問の問題を理解しました。以下の私のコメントは不適当なので忘れてください。大変失礼しました。
> (1 << 31)で「1を31ビット分左シフト」させる意味ので、2進数32ビットで既に表示できているはずです。質問者さんが32ビットと言っているのは (1 << 32)と書きたいとのことだと思いますが、それは33ビット分の数値です。
回答3件
あなたの回答
tips
プレビュー