質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

536閲覧

c++ 変数の初期化について -> int X[1 << 20];

kakedasi_cpp

総合スコア9

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2022/01/26 05:44

c/c++ の配列の初期化についての質問です。
題の通り
"int X[1 << 20]"
がどういう意味か調べてみてもわからないです。
教えてください!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kakedasi_cpp

2022/01/27 08:13

回答ありがとうございます。理由が結構深くてなるほどとはならなかったですが、これから理解できるように頑張ります。
guest

回答3

0

c/c++ の配列の初期化についての質問です。

それは「初期化」ではありません。初期化というのは、狭義には変数の作成と同時に値を与えること、広義には(作成と同時でなくても、代入などによって)変数の使用前に特定の値を与えることを言います。

C

1int array[5]={5,10,15,20,25}; //これは狭義の初期化(生成と同時にその値になる) 2int sum; //ローカル変数の宣言後の値は不定 3sum=0; //広義の初期化(一旦別の値の状態が存在する) 4for(int i=0;i<5;i++) 5 sum+=array[i];//ここで変数を使用。sumはループ開始前に0になっていなければいけない

質問の内容は配列を宣言しているだけで初期化はしていません(静的寿命の変数であれば0に初期化されますがそれは質問には関係ありませんね)。

で、配列の宣言の際の要素数は、Cでは変数を使える場合もありますが(オプション規格なのでコンパイラによる)、C++まで含めると整数の定数でなければいけなくて(CとC++との違いのひとつ)、定数ってのは、コンパイル時に(プログラム内容によらず)確定している値で、式の形であっても可です。int array2[3*10];とかもOK。
1<<20も整定数となる式ですから、この数を配列の要素として確保します。1<<20の意味については既に他の回答にある通り、「シフト演算子」で調べられると思います。

投稿2022/01/26 22:13

thkana

総合スコア7639

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

<<はシフト演算子と呼ばれるもので、a << bは「aを左にbビットシフトする(ずらす)」という意味です。
https://www.javadrive.jp/cstart/ope/index7.html


この演算子を使うと、

1 << 1
→ 0000000000000001 を 左に1ビットシフトすると 0000000000000010
→ 10進数に直して2

1 << 2
→ 0000000000000001 を 左に2ビットシフトすると 0000000000000100
→ 10進数に直して4

1 << 3
→ 0000000000000001 を 左に3ビットシフトすると 0000000000001000
→ 10進数に直して8

のように、1 << nで「2のn乗」を表すことができます。

よって、1 << 20は、2の20乗=1,048,576を表します。

投稿2022/01/26 10:02

luuguas

総合スコア492

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

1 << 20

2の20乗、ってことですね

投稿2022/01/26 06:04

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問