回答編集履歴

1

微修正

2024/03/30 13:04

投稿

ikedas
ikedas

スコア4365

test CHANGED
@@ -11,7 +11,7 @@
11
11
  -2 (11111110) >> 1 → 127 (01111111)
12
12
  ```
13
13
 
14
- C言語の標準規格では、符号付き整数型に対するシフト演算子 (`>>`など) が算術シフトなのか論理シフトなのかは規定されていません。ですから処理系によって算術シフトか論理シフトかはわかりません。実際は算術シフトにしている場合が圧倒的に多く、VC++もそうです。
14
+ C言語の標準規格では、符号付き整数型に対するシフト演算子 (`>>`など) が算術シフトなのか論理シフトなのかは規定されていません。ですから処理系によって算術シフトか論理シフトかが違う可能性がありま。実際は符号付き整数型に対するシフト演は算術シフトとされる場合が圧倒的に多いです。VC++もそうです。
15
15
 
16
16
  ですからご質問のコードでは、`int`型 (正確には`signed int`型) に対して算術シフトが実行されるためいくらシフトしても符号ビットが保存されることになります。
17
17