C++ 変数と型: Int、Char、Float、 Double、文字列とブール値
の変数 C++
A C++ 変数は名前付きのストレージ機能を提供します。これにより、プログラマは必要に応じてデータを操作できます。すべての変数には型があります。 C++変数の型は、変数のメモリ マップのサイズとレイアウト、そのメモリ内に格納できる値の範囲、およびそれに適用できる操作のセットを決定するのに役立ちます。
変数の基本型 C++
基本的なタイプは次のとおりです C++ 変数:
Int:
整数は、小数部分や指数部分を持たない数値リテラル(数値に関連付けられているもの)。例: 120、-90 など。
Double:
これは倍精度浮動小数点値です。例: 11.22、2.345
Char:
文字リテラルは、単一の文字を一重引用符で囲むことによって作成されます。 例: 「a」、「m」、「F」、「P」、「}」など。
浮く:
浮動小数点リテラルは、分数形式または指数形式の数値リテラルです。 例: 1.3、2.6
文字列リテラル:
文字列リテラルは、二重引用符で囲まれた文字のシーケンスです。例: “How are you?”
ブール:
ブール値 true または false を保持します。
変数宣言のルール C++
変数に名前を付けるための一般的なルールをいくつか示します。
- A C++ 変数名にはアルファベット、数字、アンダースコアのみ使用できます。
- A C++ 変数名は数字で始めることはできません。
- 変数名は大文字で始めてはなりません。
- 変数名 C++ キーワードにすることはできません。たとえば、int は整数を表すために使用されるキーワードです。
- A C++ 変数名はアンダースコアで始めることができます。ただし、これは良い方法とは見なされません。
C++ 変数データ型
C++ プリミティブ型の集合全体を定義する
この ボイド type には関連付けられた値がなく、限られた状況でのみ使用できます。 最も一般的には、値を返さない関数の戻り値の型として使用されます。
この 算術型 文字、整数、ブール値、浮動小数点数などが含まれます。算術型はさらに2つのカテゴリに分けられます
- 浮動小数点型float (または浮動小数点型) は 32 進数を表します。IEEE 標準では、有効桁数の最小数が指定されています。ほとんどのコンパイラは通常、指定された最小値よりも高い精度を提供します。通常、float は 64 ビット、double は 96 ビット、long double は 128 ビットまたは XNUMX ビットで表されます。
- 整数型 (文字、整数、およびブール型が含まれます)。 の ブーリアン type には True または False の XNUMX 種類の値しかありません。 いくつかあります チャリオット タイプのほとんどは国際化をサポートするために存在します。 最も基本的な文字タイプは char です。 char は、XNUMX バイトを意味する XNUMX つのマシン バイトと同じサイズです。
この 整数型 署名されている場合と署名されていない場合があります。
署名付きタイプ: 負の数または正の数 (ゼロを含む) を表します。符号付き型では、範囲は正の値と負の値の間で均等に分割される必要があります。したがって、8 ビットの符号付き char は -127 から 127 までの値を保持します。
符号なし型: unsigned 型では、すべての値は >= 0 です。8 ビット unsigned char には、0 ~ 255 (両方を含む) を含めることができます。
変数名または識別子
識別子は、文字、数字、アンダースコア文字、またはそれらの組み合わせで構成できます。 名前の長さに制限はありません。
識別子は次のとおりです。
- 文字またはアンダースコア ('_') で始まります。
- 大文字と小文字が区別されます。 大文字と小文字は区別されます。
// XNUMX つの異なる int 変数を定義します
int guru99, gurU99, GuRu99, GURU99;
この C++ 言語には、その使用のためにいくつかの名前が予約されています。
変数の命名規則として受け入れられているものが多数あります。 さまざまなプログラミング言語これらの規則に従うことで、プログラムの読みやすさが向上します。
- 識別子は、少なくともその意味を示すものでなければなりません。
- 変数名は通常小文字です (Guru99 や GURU99 ではなく、guru99)。
- 私たちが定義するクラスは通常、大文字で始まります。
- 複数の単語を含む識別子は、すべての単語を視覚的に区別する必要があります。 たとえば、guru99website ではなく、guru99_website です。
C++ 変数の宣言と定義
変数を宣言すると、変数が定義されているスコープ内のプログラムに名前が認識されます。 例:
int a=5; int b; char c='A';
int a,b; a=b=1000;
List initialization int a(5); int b{5};
Const修飾子 C++
ユーザーから取得する入力の数を示す変数 buffsize があるとします。 ここでは、プログラム全体で buffsize の値を変更したくありません。 値が変更されるべきではないことがわかっている変数を定義したいと考えています。
このような場合は、キーワード const を使用します。
const int bufSize = 512; // input buffer size
これは bufSize を定数として定義します。 bufSize を割り当てたり変更しようとすると、エラーが発生します。
ここでは、const オブジェクトを作成した後にその値を変更することはできません。必ず宣言して初期化する必要があります。そうしないと、コンパイラがエラーをスローします。
const int i = get_size(); // ok: initialized at run time const int j = 42; // ok: initialized at compile time const int k; // error: k is uninitialized const int i = 42; const int ci = i; // ok: the value in i is copied into ci
変数のスコープ C++
スコープとは、変数が意味を持つプログラムの範囲です。 ほとんどの場合、同じ名前を使用して、異なるスコープ内の異なるエンティティを参照できます。 変数は、宣言された時点から、その宣言が含まれるスコープの終わりまで表示されます。
#include <iostream> int main() { int sum = 0; // sum values from 1 through 10 inclusive for (int val = 1; val <= 10; ++val) sum += val; // equivalent to sum = sum + val cout << "Sum of 1 to 10 inclusive is "<< sum <<endl; return 0; }
このプログラムは、viz、main、sum、val の 3 つの名前を定義します。名前空間名 std と、その名前空間の他の XNUMX つの名前 cout と endl を使用します。
- 中括弧の外側に関数名「main」が定義されています。 関数名 main は、関数の外で定義された他のほとんどの名前と同様に、グローバル スコープを持ちます。 つまり、一度宣言すると、 グローバルスコープ プログラム全体を通じてアクセスできます。
- 変数 sum は、main 関数の本体であるブロックのスコープ内で定義されます。 宣言点から、および main 関数本体の残りの部分全体を通してアクセスできます。 ただし、その外側ではありません。 これは、変数合計が ブロックスコープ.
- 変数valは「for文」のスコープ内で定義されます。 このステートメントでは簡単に使用できますが、メイン関数の他の場所では使用できません。 それは持っています ローカルスコープ.
ネストされたスコープ
スコープには他のスコープを含めることができます。 含まれる (またはネストされた) スコープは、内部スコープと呼ばれます。 含まれるスコープは外側のスコープです。
#include <iostream> using namespace std; // Program for illustration purposes only: It is bad style for a function // to use a global variable and also define a local variable with the same name int reused = 42; // reused has global scope int main() { int unique = 0; // unique has block scope // output #1: uses global reused; prints 42 0 cout << reused << " " << unique << endl; int reused = 0; // new, local object named reused hides global reused // output #2: uses local reused; prints 0 0 cout << reused << " " << unique << endl; // output #3: explicitly requests the global reused; prints 42 0 cout << ::reused << " " << unique << endl; return 0; }
出力#1 は、再利用のローカル定義の前に表示されます。 したがって、この出力は
ステートメントは、グローバル スコープで定義された名前を再利用するステートメントです。 このステートメントの出力は
42 0
出力#2 再利用のローカル定義の後に発生します。 現在は範囲内です。 したがって、この XNUMX 番目の出力ステートメントは、グローバル オブジェクトではなく、reused という名前のローカル オブジェクトを単に使用し、出力します。
0 0
出力#3 を使用してデフォルトのスコープ規則をオーバーライドします。 スコープ演算子グローバルスコープには名前がありません。したがって、スコープ演算子(::)の左側が空の場合、グローバルスコープの右側にある名前を取得する要求として解釈されます。したがって、式はグローバルの再利用を使用し、出力します。
42 0
変数の型変換
ある型の変数は別の型に変換することができます。これは「型変換」と呼ばれます。異なる型の変数を変換するためのルールを見てみましょう。 C++ 変数の型:
bool 変数に非 bool を割り当てると、値が 0 の場合は false が生成され、それ以外の場合は true が生成されます。
bool b = 42; // b is true
ブール値を他の算術型のいずれかに代入すると、ブール値が true の場合は 1 が返され、ブール値が false の場合は 0 が返されます。
bool b = true; int i = b; // i has value 1
浮動小数点値を int 型の変数に代入すると、切り捨てられた値が生成されます。 格納される値は小数点以下の部分です。
int i = 3.14; // i has value 3
float 型の変数に int 値を代入すると、小数部は XNUMX になります。 整数のビット数が浮動変数に対応できる量を超えると、通常、精度が失われます。
Int i=3; double pi = i; // pi has value 3.0
範囲外の値を符号なし型の変数に代入しようとすると、結果は値 %(modulo) の余りになります。
たとえば、8 ビット unsigned char 型は、0 ~ 255 の値を保持できます。 この範囲外の値を代入すると、コンパイラはその値の剰余を 256 を法として代入することになります。 したがって、上記のロジックにより、1 ビット unsigned char に –8 を代入すると、そのオブジェクトに値 255 が与えられます。
unsigned char c = -1; // assuming 8-bit chars, c has value 255
範囲外の値を signed 型のオブジェクトに代入しようとすると、結果は予測できません。 未定義です。 プログラムは外部では動作しているように見える場合もあれば、クラッシュしたり、ガベージ値を生成したりする場合があります。
signed char c2 = 256; // assuming 8-bit chars, the value of c2 is undefined
コンパイラは、ある型の値が予期される場所で、ある型の値を使用する場合に、これらと同じ種類の変換を適用します。
int i = 42; if (i) // condition will evaluate as true i = 0;
この値が 0 の場合、条件は false です。 他のすべての (ゼロ以外の) 値は true になります。 同じ概念により、算術式で bool を使用すると、その値は常に 0 または 1 のいずれかに変換されます。その結果、算術式で bool を使用することは、通常、ほぼ確実に間違っています。
注意: 署名付きタイプと署名なしタイプを混合しないでください
符号付きと符号なしが混在した式は、符号付きの値が負の場合、予期せぬ間違った結果をもたらす可能性があります。 上で説明したように、符号付きの値は自動的に符号なしに変換されます。
たとえば、次のような算術式では、
x* y
x が -1 で y が 1 で、x と y の両方が int の場合、値は予想どおり -1 になります。
x が int で、y が符号なしの場合、この式の値は、コンパイル マシン上の整数のビット数によって決まります。 私たちのマシンでは、この式は 4294967295 を生成します。
レジスタ変数
レジスタ変数はメモリ変数に比べてアクセスが高速です。そのため、 C++ プログラムはレジスターに次のように配置できる。 登録 キーワード。レジスタキーワードは、指定された変数をレジスタに格納するようにコンパイラに指示します。レジスタに格納するかどうかはコンパイラが選択します。通常、コンパイラはさまざまな最適化を行い、一部の変数をレジスタに格納します。レジスタ変数の数に制限はありません。 C++ プログラム。しかし、コンパイラは変数をレジスタに格納しない場合があります。これは、レジスタ メモリが非常に限られており、OS によって最も一般的に使用されるためです。
定義します:
register int i;
コメント
コメントは、コンパイラによって無視されるコードの部分です。これにより、プログラマーはソースコード/プログラムの関連領域にメモを残すことができます。コメントはブロック形式または1行で記述されます。プログラムコメントは説明文です。 C++ ソースコードを読む人に役立つコード。すべてのプログラミング言語では、何らかの形式のコメントが許可されています。 C++ 単一行コメントと複数行コメントの両方をサポートします。
- XNUMX 行コメント // で始まり、行末まで続くものです。 コメント行の最後の文字が \ の場合、コメントは次の行に続きます。
- 複数行のコメント /* で始まり */ で終わるものです。
/* This is a comment */ /* C++ comments can also * span multiple lines */
エスケープシーケンス
バックスペースや制御文字などの一部の文字には、可視イメージがありません。このような文字は、印刷不可能な文字と呼ばれます。その他の文字 (一重引用符、二重引用符、疑問符、バックスラッシュ) は、多くのプログラミング言語で特別な意味を持ちます。
私たちのプログラムでは、これらの文字を直接使用することはできません。 代わりに、エスケープ シーケンスを使用してそのような char を表すことができます。 エスケープ シーケンスはバックスラッシュで始まります。
この C++ プログラミング言語 いくつかのエスケープ シーケンスを定義します。
それは何をしますか? | 文字 |
---|---|
改行 | \n |
垂直タブ | \v |
バックスラッシュ | \\ |
キャリッジリターン | \r |
水平タブ | \t |
バックスペース | \b |
クエスチョンマーク | \? |
フォームフィード | \f |
警報(ベル) | \a |
Double 率 | \」 |
一重引用符 | \ ' |
エスケープ シーケンスを単一の文字であるかのように使用します。
cout << '\n'; // prints a newline cout << "\tguru99!\n"; // prints a tab followed by "guru99!" and a newline
一般化されたエスケープ シーケンス \x に続いて 1 つ以上の XNUMX 進数を記述することもできます。 または、\ の後に XNUMX つ、XNUMX つ、または XNUMX つの XNUMX 進数字を続けて使用します。 一般化されたエスケープ シーケンスは、文字の数値を表します。 いくつかの例 (Latin-XNUMX 文字セットを想定):
\7 (bell) \12 (newline) \40 (blank) \0 (null) \115 ('M') \x4d ('M')
他の文字を使用している場合と同様に、事前定義されたエスケープ シーケンスを使用できます。
cout << "Hi \x4dO\115!\n"; // prints Hi MOM! followed by a newline cout << '\115' << '\n'; // prints M followed by a newline
まとめ
- A C++ 変数は名前付きのストレージ機能を提供します。
- C++ 変数の型: int、double、 チャリオット、float、string、bool など。
- 含まれる (またはネストされた) スコープは内部スコープと呼ばれ、含まれるスコープは外部スコープと呼ばれます。
- ある型の変数を別の型に変換できます。 これは「型変換」として知られています。
- レジスタ変数はメモリ変数に比べてアクセスが高速です。
- コメントは、コンパイラによって無視されるコードの部分です。
- バックスペース文字や制御文字などの一部の文字には、表示されるイメージがありません。