これは私が試したものです:
int i=-1,size=1;
while (i>>1)
size++;
printf("%d",size);
目標は、演算子int
を使用せずに のサイズを決定することです。sizeof
上記のループは無限であることが判明しました。意図したとおりに修正する方法はありますか?
ではなくunsigned
for を使用してください。それらは同じサイズであることが保証されており、符号付き整数の右シフトは実装で定義されています (ただし、通常は符号ビットがシフトされます)。結果を で割ることを忘れないでください(これは8 になるとは限りません)。i
int
CHAR_BIT
右シフトに負の数を選択しました。
負の数を右にシフトすると、符号ビット 1 で満たされる (実装によってはそうでない) ため、値が 0 (=false) になることはありません。これは、文句を言っている無限ループを正確に取得することを意味します。
あなたのループは確かに無限です。i = 1 から開始し、i = 0 に到達して停止するまで左にシフトします。あなたはビットを持っています。
-edit--- これは、符号付き整数と符号なし整数の両方で機能します。