回答編集履歴

1

追加

2020/08/24 17:22

投稿

amiya
amiya

スコア1218

test CHANGED
@@ -9,3 +9,41 @@
9
9
  そもそもここは何を意図してどういう動作をすることを想定して書いた内容なのでしょう?
10
10
 
11
11
  その内容から、ロジックを確認しなおしてみてください。
12
+
13
+
14
+
15
+ ---
16
+
17
+ > このように試しにコードを書き換えてみたら警告文が消えました。自己解決です。
18
+
19
+ ```
20
+
21
+ int i = -1;
22
+
23
+ if (k < m)
24
+
25
+ return ( i << (int)n) + (int)k + 1;
26
+
27
+ //return (-1 << n) + k + 1;
28
+
29
+ else
30
+
31
+ return k;
32
+
33
+ ```
34
+
35
+
36
+
37
+ これだと、負の値をシフトしていることに変わりはないと思うから、
38
+
39
+ エラーがなくなっても動作が補償されないことには変わりないと思います。
40
+
41
+ 要は、**何が起こるかわからない**コードです。
42
+
43
+ (ついでに、`n`はもともとintなので、キャストは不要です)
44
+
45
+
46
+
47
+ `-1`が何のためにあるのかはよくわからないけど、もし、全て1のビット配列を用意したいだけであれば、
48
+
49
+ `(unsigned)~0<<n`にするとか、もしくは、`(unsigned)-1<<n`にしても結果は同じになります。