回答編集履歴

1

追記

2021/06/01 07:40

投稿

ozwk
ozwk

スコア13553

test CHANGED
@@ -16,6 +16,8 @@
16
16
 
17
17
  負数に対する右ビットシフト`>>`の結果は処理系依存で、大抵の場合は算術シフトになります。
18
18
 
19
+ 算術シフトとはシフトにより空いたビットを符号ビットで埋める方式のシフトのことです。
20
+
19
21
  今回も算術シフトだったとすると、`1000...000 >> 1`は`1100...000`になります。
20
22
 
21
23
  `while`ループを繰り返していると最終的には`bit`は `1111111...111`(十進数で`-1`)になって
@@ -25,3 +27,7 @@
25
27
 
26
28
 
27
29
  `bit`を`unsigned int`型にするだけで解決します。
30
+
31
+
32
+
33
+ (もっと言えば今回のような変数のビット幅が重要なプログラムは`stdint.h`をインクルードして`uint32_t`型を使ったほうがいい)