-2

これは私が試したものです:

int i=-1,size=1;
while (i>>1)
    size++;
printf("%d",size);

目標は、演算子intを使用せずに のサイズを決定することです。sizeof

上記のループは無限であることが判明しました。意図したとおりに修正する方法はありますか?

4

3 に答える 3

7

ではなくunsignedfor を使用してください。それらは同じサイズであることが保証されており、符号付き整数の右シフトは実装で定義されています (ただし、通常は符号ビットがシフトされます)。結果を で割ることを忘れないでください(これは8 になるとは限りません)。iintCHAR_BIT

于 2013-07-08T08:50:38.493 に答える
2

右シフトに負の数を選択しました。
負の数を右にシフトすると、符号ビット 1 で満たされる (実装によってはそうでない) ため、値が 0 (=false) になることはありません。これは、文句を言っている無限ループを正確に取得することを意味します。

于 2013-07-08T08:48:38.380 に答える
-1

あなたのループは確かに無限です。i = 1 から開始し、i = 0 に到達して停止するまで左にシフトします。あなたはビットを持っています。

-edit--- これは、符号付き整数と符号なし整数の両方で機能します。

于 2013-07-08T09:43:16.613 に答える