回答編集履歴

1

少し追記

2022/11/15 08:39

投稿

maisumakun
maisumakun

スコア145183

test CHANGED
@@ -1,3 +1,3 @@
1
- `(num != (num >>= 1) << 1)`のような、「代入した変数を別の場所で参照するコード」は、C++では評価順が決まっておらず、**未定義の動作**となります。
1
+ `(num != (num >>= 1) << 1)`のような、「代入した変数を、(副作用完了点を超えない)同じ式の別の場所で参照するコード」は、C++では評価順が決まっておらず、**未定義の動作**となります。
2
2
 
3
3
  素直に、`num`のシフトとビットごとの評価を別な式で行いましょう。