回答編集履歴
7
test
CHANGED
@@ -13,8 +13,8 @@
|
|
13
13
|
左シフト演算子では、結果の型の範囲外にある上位ビットは破棄され、空の下位ビット位置は、ゼロに設定されます。[参考](https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/bitwise-and-shift-operators#left-shift-operator-:~:text=%E5%B7%A6%E3%82%B7%E3%83%95%E3%83%88%E6%BC%94%E7%AE%97%E5%AD%90%E3%81%A7%E3%81%AF%E3%80%81%E7%B5%90%E6%9E%9C%E3%81%AE%E5%9E%8B%E3%81%AE%E7%AF%84%E5%9B%B2%E5%A4%96%E3%81%AB%E3%81%82%E3%82%8B%E4%B8%8A%E4%BD%8D%E3%83%93%E3%83%83%E3%83%88%E3%81%AF%E7%A0%B4%E6%A3%84%E3%81%95%E3%82%8C%E3%80%81%E7%A9%BA%E3%81%AE%E4%B8%8B%E4%BD%8D%E3%83%93%E3%83%83%E3%83%88%E4%BD%8D%E7%BD%AE%E3%81%AF%E3%80%81%E3%82%BC%E3%83%AD%E3%81%AB%E8%A8%AD%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82)
|
14
14
|
|
15
15
|
# <上記の事実と質問の状況から推測できること>
|
16
|
-
第4問は、左シフト演算の結果 int の範囲を超えるようなa
|
16
|
+
第4問は、左シフト演算の結果 int の範囲を超えるような a, b が設定されていると考えられます。
|
17
|
-
質問のコード
|
17
|
+
質問のコードは、int 型の数に対してシフト演算するようになっていますが、第4問ではシフト演算の結果が int 型の範囲を超えており、上位ビットが破棄されて Wrong Answer になってしまっていると推測されます。
|
18
18
|
|
19
19
|
# <対応策>
|
20
20
|
したがって、64bit整数(long)に対して左シフト演算を行うように組む必要があります。
|
6
test
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
# <上記の事実と質問の状況から推測できること>
|
16
16
|
第4問は、左シフト演算の結果 int の範囲を超えるようなa、b が設定されていると考えられます。
|
17
|
-
|
17
|
+
質問のコードでは、int型の数に対してシフト演算するようになっています。第4問はシフト演算の結果が int 型の範囲を超えてしまい、上位ビットが破棄されて Wroing Answerになってしまっていると推測されます。
|
18
18
|
|
19
19
|
# <対応策>
|
20
20
|
したがって、64bit整数(long)に対して左シフト演算を行うように組む必要があります。
|
5
test
CHANGED
@@ -17,8 +17,8 @@
|
|
17
17
|
プログラム上、int型の数に対してシフト演算するようになっていると、結果も int 型となるため、第4問では上位ビットが破棄されて Wroing Answerになってしまっていると推測されます。
|
18
18
|
|
19
19
|
# <対応策>
|
20
|
-
したがって、
|
20
|
+
したがって、64bit整数(long)に対して左シフト演算を行うように組む必要があります。
|
21
|
-
なお
|
21
|
+
なお、左シフト演算子の右辺 に long型を置くとエラーになるので、右辺は int のままとします。
|
22
22
|
|
23
23
|
```C#
|
24
24
|
using System;
|
4
test
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
左シフト演算子では、結果の型の範囲外にある上位ビットは破棄され、空の下位ビット位置は、ゼロに設定されます。[参考](https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/bitwise-and-shift-operators#left-shift-operator-:~:text=%E5%B7%A6%E3%82%B7%E3%83%95%E3%83%88%E6%BC%94%E7%AE%97%E5%AD%90%E3%81%A7%E3%81%AF%E3%80%81%E7%B5%90%E6%9E%9C%E3%81%AE%E5%9E%8B%E3%81%AE%E7%AF%84%E5%9B%B2%E5%A4%96%E3%81%AB%E3%81%82%E3%82%8B%E4%B8%8A%E4%BD%8D%E3%83%93%E3%83%83%E3%83%88%E3%81%AF%E7%A0%B4%E6%A3%84%E3%81%95%E3%82%8C%E3%80%81%E7%A9%BA%E3%81%AE%E4%B8%8B%E4%BD%8D%E3%83%93%E3%83%83%E3%83%88%E4%BD%8D%E7%BD%AE%E3%81%AF%E3%80%81%E3%82%BC%E3%83%AD%E3%81%AB%E8%A8%AD%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82)
|
14
14
|
|
15
|
-
# <上記の事実と
|
15
|
+
# <上記の事実と質問の状況から推測できること>
|
16
16
|
第4問は、左シフト演算の結果 int の範囲を超えるようなa、b が設定されていると考えられます。
|
17
17
|
プログラム上、int型の数に対してシフト演算するようになっていると、結果も int 型となるため、第4問では上位ビットが破棄されて Wroing Answerになってしまっていると推測されます。
|
18
18
|
|
3
test
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
+
# <諸前提>
|
2
|
+
```
|
1
3
|
●制約
|
2
4
|
a(1≦a≦3×10^6)
|
3
5
|
b(1≦b≦10)
|
6
|
+
```
|
4
7
|
より、
|
5
8
|
aを左にbビットシフトした結果がとりうる最大値は
|
6
9
|
3 × 10^6 × 1,024 = 3,072,000,000
|
@@ -9,9 +12,11 @@
|
|
9
12
|
|
10
13
|
左シフト演算子では、結果の型の範囲外にある上位ビットは破棄され、空の下位ビット位置は、ゼロに設定されます。[参考](https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/bitwise-and-shift-operators#left-shift-operator-:~:text=%E5%B7%A6%E3%82%B7%E3%83%95%E3%83%88%E6%BC%94%E7%AE%97%E5%AD%90%E3%81%A7%E3%81%AF%E3%80%81%E7%B5%90%E6%9E%9C%E3%81%AE%E5%9E%8B%E3%81%AE%E7%AF%84%E5%9B%B2%E5%A4%96%E3%81%AB%E3%81%82%E3%82%8B%E4%B8%8A%E4%BD%8D%E3%83%93%E3%83%83%E3%83%88%E3%81%AF%E7%A0%B4%E6%A3%84%E3%81%95%E3%82%8C%E3%80%81%E7%A9%BA%E3%81%AE%E4%B8%8B%E4%BD%8D%E3%83%93%E3%83%83%E3%83%88%E4%BD%8D%E7%BD%AE%E3%81%AF%E3%80%81%E3%82%BC%E3%83%AD%E3%81%AB%E8%A8%AD%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82)
|
11
14
|
|
15
|
+
# <上記の事実と、質問の状況から得られる推測>
|
12
16
|
第4問は、左シフト演算の結果 int の範囲を超えるようなa、b が設定されていると考えられます。
|
13
|
-
プログラム上、int
|
17
|
+
プログラム上、int型の数に対してシフト演算するようになっていると、結果も int 型となるため、第4問では上位ビットが破棄されて Wroing Answerになってしまっていると推測されます。
|
14
18
|
|
19
|
+
# <対応策>
|
15
20
|
したがって、たとえば計算結果が64bit整数(long)等になるように組む必要があります。
|
16
21
|
なお 左シフト演算子の右辺 に long型を置くとエラーになるので、右辺は int のままとします。
|
17
22
|
|
2
test
CHANGED
@@ -6,6 +6,11 @@
|
|
6
6
|
3 × 10^6 × 1,024 = 3,072,000,000
|
7
7
|
ですが、これは int の上限(2,147,483,647)を超えています。
|
8
8
|
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/integral-numeric-types
|
9
|
+
|
10
|
+
左シフト演算子では、結果の型の範囲外にある上位ビットは破棄され、空の下位ビット位置は、ゼロに設定されます。[参考](https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/bitwise-and-shift-operators#left-shift-operator-:~:text=%E5%B7%A6%E3%82%B7%E3%83%95%E3%83%88%E6%BC%94%E7%AE%97%E5%AD%90%E3%81%A7%E3%81%AF%E3%80%81%E7%B5%90%E6%9E%9C%E3%81%AE%E5%9E%8B%E3%81%AE%E7%AF%84%E5%9B%B2%E5%A4%96%E3%81%AB%E3%81%82%E3%82%8B%E4%B8%8A%E4%BD%8D%E3%83%93%E3%83%83%E3%83%88%E3%81%AF%E7%A0%B4%E6%A3%84%E3%81%95%E3%82%8C%E3%80%81%E7%A9%BA%E3%81%AE%E4%B8%8B%E4%BD%8D%E3%83%93%E3%83%83%E3%83%88%E4%BD%8D%E7%BD%AE%E3%81%AF%E3%80%81%E3%82%BC%E3%83%AD%E3%81%AB%E8%A8%AD%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82)
|
11
|
+
|
12
|
+
第4問は、左シフト演算の結果 int の範囲を超えるようなa、b が設定されていると考えられます。
|
13
|
+
プログラム上、int の状態でシフト演算するようになっていると、第4問で上位ビットが破棄されて Wroing Answerになってしまっていると推測されます。
|
9
14
|
|
10
15
|
したがって、たとえば計算結果が64bit整数(long)等になるように組む必要があります。
|
11
16
|
なお 左シフト演算子の右辺 に long型を置くとエラーになるので、右辺は int のままとします。
|
1
test
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/integral-numeric-types
|
9
9
|
|
10
10
|
したがって、たとえば計算結果が64bit整数(long)等になるように組む必要があります。
|
11
|
-
なお
|
11
|
+
なお 左シフト演算子の右辺 に long型を置くとエラーになるので、右辺は int のままとします。
|
12
12
|
|
13
13
|
```C#
|
14
14
|
using System;
|