回答編集履歴

4

1<<32がどうなるのが正しいか不明なので説明から除く

2023/05/31 14:43

投稿

actorbug
actorbug

スコア2224

test CHANGED
@@ -6,11 +6,11 @@
6
6
  念のため解説もしておきます。
7
7
 
8
8
  C++で普通に`1`と書いた場合、`int`型(通常32bit)の1と解釈されます。
9
- そのため、たいていの処理系では`1 << 31`は-2147483648となりますし、`1 << 32`は1となります
9
+ そのため、たいていの処理系では`1 << 31`は-2147483648となります。
10
10
  (細かいことを言うと、範囲外までシフトした場合の動作は未定義)
11
11
 
12
12
  今回の問題では、`long long`型(64bit以上)の1である必要があるので、`1LL`と書きましょう。
13
- `1LL << 31`なら2147483648に、`1LL << 32`ら4294967296となります。
13
+ `1LL << 31`なら2147483648になります。
14
14
 
15
15
  参考 : https://cpprefjp.github.io/lang/cpp11/long_long_type.html より引用
16
16
  > 符号付き整数型である`long long`を表す整数リテラルには、`ll`もしくは`LL`サフィックスを使用する。

3

1<<32の修正

2023/05/31 14:40

投稿

actorbug
actorbug

スコア2224

test CHANGED
@@ -6,7 +6,7 @@
6
6
  念のため解説もしておきます。
7
7
 
8
8
  C++で普通に`1`と書いた場合、`int`型(通常32bit)の1と解釈されます。
9
- そのため、たいていの処理系では`1 << 31`は-2147483648となりますし、`1 << 32`は0となります。
9
+ そのため、たいていの処理系では`1 << 31`は-2147483648となりますし、`1 << 32`は1となります。
10
10
  (細かいことを言うと、範囲外までシフトした場合の動作は未定義)
11
11
 
12
12
  今回の問題では、`long long`型(64bit以上)の1である必要があるので、`1LL`と書きましょう。

2

未定義の説明追加

2023/05/30 21:33

投稿

actorbug
actorbug

スコア2224

test CHANGED
@@ -6,7 +6,8 @@
6
6
  念のため解説もしておきます。
7
7
 
8
8
  C++で普通に`1`と書いた場合、`int`型(通常32bit)の1と解釈されます。
9
- そのため、`1 << 31`は-2147483648となりますし、`1 << 32`は0となります。
9
+ そのため、たいていの処理系では`1 << 31`は-2147483648となりますし、`1 << 32`は0となります。
10
+ (細かいことを言うと、範囲外までシフトした場合の動作は未定義)
10
11
 
11
12
  今回の問題では、`long long`型(64bit以上)の1である必要があるので、`1LL`と書きましょう。
12
13
  `1LL << 31`なら2147483648に、`1LL << 32`なら4294967296となります。

1

解説追加

2023/05/30 21:14

投稿

actorbug
actorbug

スコア2224

test CHANGED
@@ -3,3 +3,13 @@
3
3
  10000000000000000000000000000000
4
4
  1
5
5
  ```
6
+ 念のため解説もしておきます。
7
+
8
+ C++で普通に`1`と書いた場合、`int`型(通常32bit)の1と解釈されます。
9
+ そのため、`1 << 31`は-2147483648となりますし、`1 << 32`は0となります。
10
+
11
+ 今回の問題では、`long long`型(64bit以上)の1である必要があるので、`1LL`と書きましょう。
12
+ `1LL << 31`なら2147483648に、`1LL << 32`なら4294967296となります。
13
+
14
+ 参考 : https://cpprefjp.github.io/lang/cpp11/long_long_type.html より引用
15
+ > 符号付き整数型である`long long`を表す整数リテラルには、`ll`もしくは`LL`サフィックスを使用する。