teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追加

2020/08/24 17:22

投稿

amiya
amiya

スコア1218

answer CHANGED
@@ -3,4 +3,23 @@
3
3
  対処法は、`-1`を左シフトすることを回避してください。
4
4
  `-1 << n`
5
5
  そもそもここは何を意図してどういう動作をすることを想定して書いた内容なのでしょう?
6
- その内容から、ロジックを確認しなおしてみてください。
6
+ その内容から、ロジックを確認しなおしてみてください。
7
+
8
+ ---
9
+ > このように試しにコードを書き換えてみたら警告文が消えました。自己解決です。
10
+ ```
11
+ int i = -1;
12
+ if (k < m)
13
+ return ( i << (int)n) + (int)k + 1;
14
+ //return (-1 << n) + k + 1;
15
+ else
16
+ return k;
17
+ ```
18
+
19
+ これだと、負の値をシフトしていることに変わりはないと思うから、
20
+ エラーがなくなっても動作が補償されないことには変わりないと思います。
21
+ 要は、**何が起こるかわからない**コードです。
22
+ (ついでに、`n`はもともとintなので、キャストは不要です)
23
+
24
+ `-1`が何のためにあるのかはよくわからないけど、もし、全て1のビット配列を用意したいだけであれば、
25
+ `(unsigned)~0<<n`にするとか、もしくは、`(unsigned)-1<<n`にしても結果は同じになります。