はじめに
この実験では、C++ の変数と型について学びます。変数を定義する方法と、さまざまな型の変数を使用する方法を学びます。
この実験では、C++ の変数と型について学びます。変数を定義する方法と、さまざまな型の変数を使用する方法を学びます。
コンピュータプログラムはデータを操作(または処理)します。「変数」は、処理のために「データの一部を格納」するために使用されます。格納されている値を変更できるため、「変数」と呼ばれます。
「変数」は、特定のデータ「型」の「値」を格納する「名前付き」の格納場所です。言い換えると、「変数」には「名前」、「型」があり、「値」を格納します。
radius、area、age、height などです。変数に値を割り当てたり、格納されている値を取得するためには、その名前が必要です。int や double などの型があります。次の図は、2 種類の変数である int 型と double 型を示しています。int 型の変数は整数(整数)を格納します。double 型の変数は実数を格納します。

変数(または関数やクラスなどの他のエンティティ)に「名前」を付けるために「識別子」が必要です。C++ では、識別子に対して次の「ルール」が課されます。
(a-z, A-Z)、数字 (0-9)、アンダースコア _ で構成される文字のシーケンスです。+、-、*、/、'@' など)は許可されていません。int、double、if、else、for)にすることはできません。rose は Rose ではなく、ROSE でもありません。変数の命名規則
変数名は名詞、または複数の単語で構成される名詞句です。最初の単語は小文字で、その後の単語は先頭を大文字にし、単語の間には空白を入れません。たとえば、thefontSize、roomNumber、xMax、thisIsAVeryLongVariableName などで、これは「キャメルケース」と呼ばれます。
推奨事項
numberOfStudents や numStudents などです。a、b、c、d、i、j、k、i1、j99 のような無意味な名前を使わないでください。単一のアルファベット名を避けてください。ただし、座標の x、y、z、インデックスの i のような一般的な名前の場合は例外です。row と、複数の行を表す rows を使います。使用する前に、まず次のいずれかの構文でその「名前」と「型」を宣言する必要があります。
| 構文 | 例 |
|---|---|
| 指定された型の変数を宣言する | int option; |
| 同じ型の複数の変数を宣言し、コンマで区切る | double sum, difference, product, quotient; |
| 変数を宣言し、この型の初期値を割り当てる | int magicNumber = 88; |
| この型の初期値を持つ複数の変数を宣言する | double sum = 0.0, product = 1.0; |
例
int mark1; // mark1 という int 型の変数を宣言する
mark1 = 76; // mark1 を使用する
int mark2; // int 型の変数 mark2 を宣言する
mark2 = mark1 + 10; // mark2 と mark1 を使用する
double average; // double 型の変数 average を宣言する
average = (mark1 + mark2) / 2.0; // average、mark1 および mark2 を使用する
int mark1; // エラー:2 回宣言する
mark2 = "Hello"; // エラー:異なる型の値を割り当てる
int number; // 宣言されているが初期化されていない
cout << number << endl; // 初期化される前に使用される、警告/エラーは表示されないが、予期しない結果になる
次のことに注意してください。
定数は、キーワード const で宣言される「変更不可能」な変数です。その値はプログラム実行中に変更できません。また、const は宣言時に初期化する必要があります。例:
const double PI = 3.1415926; // 初期化が必要
定数の命名規則:アンダースコアで連結された大文字の単語を使用します。たとえば、MIN_VALUE。
「式」は、('+'、'-'、'*'、'/' などの)「演算子」と「オペランド」(変数またはリテラル値)の組み合わせで、特定の型の単一の値を生成するように「評価」できます。たとえば、
1 + 2 * 3 // int 型の 7 を返す
int sum, number;
sum + number // int 型の値に評価される
double principal, interestRate;
principal * (1 + interestRate) // double 型の値に評価される
「代入文」は、次のように定義されます。
右辺は値でなければならず、左辺は変数(またはメモリアドレス)でなければなりません。
代入文の構文は以下の通りです。
| 構文 | 例 |
|---|---|
| (右辺の)リテラル値を変数(左辺の)に代入する | number = 88; |
| (右辺の)式を評価し、その結果を変数(左辺の)に代入する | sum = sum + number; |
代入文は次のように解釈されます。まず、右辺(RHS)の「式」が評価されて結果の値(「rvalue」または右辺値と呼ばれます)が生成されます。その後、「rvalue」が左辺(LHS)の変数(または「lvalue」、つまり「rvalue」を保持できる場所)に代入されます。
以下の表は、基本型の「典型的な」サイズ、最小値、最大値を示しています。再度、サイズは実装に依存することに注意してください。
| カテゴリ | 型 | 説明 | バイト数 (典型的) | 最小値 (典型的) | 最大値 (典型的) |
|---|---|---|---|---|---|
| 整数型 | int(または signed int) | 符号付き整数(少なくとも 16 ビット) | 4 (2) | -2147483648 | 2147483647 |
| 整数型 | unsigned int | 符号なし整数(少なくとも 16 ビット) | 4 (2) | 0 | 4294967295 |
| 整数型 | char | 文字(符号付きまたは符号なしは実装に依存) | 1 | ||
| 整数型 | signed char | 文字または符号付き微小整数(符号付きであることが保証される) | 1 | -128 | 127 |
| 整数型 | unsigned char | 文字または符号なし微小整数(符号なしであることが保証される) | 1 | 0 | 255 |
| 整数型 | signed short | 短い符号付き整数(少なくとも 16 ビット) | 2 | -32768 | 32767 |
| 整数型 | unsigned short | 短い符号なし整数(少なくとも 16 ビット) | 2 | 0 | 65535 |
| 整数型 | long | 長い符号付き整数(少なくとも 32 ビット) | 4 (8) | -2147483648 | 2147483647 |
| 整数型 | unsigned long | 長い符号なし整数(少なくとも 32 ビット) | 4 (8) | 0 | 上記と同じ |
| 整数型 | long long | 非常に長い符号付き整数(少なくとも 64 ビット) | 8 | -2e^63 | 2e^63-1 |
| 整数型 | unsigned long long | 非常に長い符号なし整数(少なくとも 64 ビット) | 8 | 0 | 2e^64-1 |
| 実数型 | float | 浮動小数点数、約 7 桁 | 4 | 3.4e^38 | 3.4e^(-38) |
| 実数型 | double | 倍精度浮動小数点数、約 15 桁 | 8 | 1.7e^308 | 1.7e^(-308) |
| 実数型 | long double | 長い倍精度浮動小数点数、約 19 桁 | 12 (8) | ||
| ブール型 | bool | true または false のブール値 |
1 | false (0) | true (1 または非ゼロ) |
| 広い文字型 | wchar_t、char16_t、char32_t | 広い(2 バイト)文字 | 2 (4) |
sizeof 演算子
C/C++ は、オペランドのサイズ(バイト数)を取得する単項の sizeof 演算子を提供しています。次のプログラムは、sizeof 演算子を使用して基本型のサイズを表示します(以下のコードを /home/labex/Code の test.cpp に保存してください)。
/*
* 基本型のサイズを表示する。
*/
#include <iostream>
using namespace std;
int main() {
cout << "sizeof(char) is " << sizeof(char) << " bytes " << endl;
cout << "sizeof(short) is " << sizeof(short) << " bytes " << endl;
cout << "sizeof(int) is " << sizeof(int) << " bytes " << endl;
cout << "sizeof(long) is " << sizeof(long) << " bytes " << endl;
cout << "sizeof(long long) is " << sizeof(long long) << " bytes " << endl;
cout << "sizeof(float) is " << sizeof(float) << " bytes " << endl;
cout << "sizeof(double) is " << sizeof(double) << " bytes " << endl;
cout << "sizeof(long double) is " << sizeof(long double) << " bytes " << endl;
cout << "sizeof(bool) is " << sizeof(bool) << " bytes " << endl;
return 0;
}
出力:
sizeof(char) is 1 bytes
sizeof(short) is 2 bytes
sizeof(int) is 4 bytes
sizeof(long) is 4 bytes
sizeof(long long) is 8 bytes
sizeof(float) is 4 bytes
sizeof(double) is 8 bytes
sizeof(long double) is 12 bytes
sizeof(bool) is 1 bytes

typedef 文
unsigned int を何度も入力するのは面倒です。typedef 文を使用すると、既存の型に新しい名前を付けることができます。たとえば、次のように、unsigned int に対して "uint" という新しい型を作成できます。typedef は #include の直後に配置する必要があります。typedef は注意深く使用する必要があります。なぜなら、プログラムを読みにくく理解しにくくするからです。
typedef unsigned int uint;
多くの C/C++ コンパイラは、unsigned int の typedef である size_t という型を定義しています。
typedef unsigned int size_t;
整数リテラル
デフォルトでは、123 や -456 などの整数は int として扱われます。例えば、
int number = -123;
int sum = 4567;
デフォルトの基数 10 の整数の他に、16 進数の値には接頭辞 '0x' を、2 進数の値には接頭辞 '0b' を使用できます(一部のコンパイラでは)。例えば、
int number1 = 1234; // 10 進数
int number2 = 01234; // 8 進数 1234、10 進数 2322
int number3 = 0x1abc; // 16 進数 1ABC、10 進数 15274
int number4 = 0b10001001; // 2 進数(一部のコンパイラでは動作しない場合があります)
long リテラルは接尾辞 'L' または 'l' で識別されます(小文字は避けてください。1 と混同される可能性があります)。long long int は接尾辞 'LL' で識別されます。また、unsigned int には接尾辞 'U'、unsigned long には接尾辞 'UL'、unsigned long long int には接尾辞 'ULL' を使用できます。例えば、
long number = 12345678L; // long 型には接尾辞 'L' が必要
long sum = 123; // int 型の 123 は自動的に long 型の 123L にキャストされます
long long bigNumber = 987654321LL; // long long int 型には接尾辞 'LL' が必要
short リテラルには接尾辞は必要ありません。ただし、許容範囲内の整数値のみを使用できます。例えば、
short midSizeNumber = -12345;
浮動小数点数リテラル
小数点がある数、例えば 55.66 や -33.44 は、デフォルトで double として扱われます。また、科学表記でも表現できます。例えば、1.2e3、-5.5E-6。ここで、e または E は 10 のべき乗を表す指数を示します。小数部分または指数の前には、プラス (+) またはマイナス (-) の符号を付けることができます。指数は整数でなければなりません。
float リテラルには必ず接尾辞 'f' または 'F' を使用する必要があります。例えば、-1.2345F。例えば、
float average = 55.66; // エラー!右辺は double 型です。float 型には接尾辞 'f' が必要です。
float average = 55.66f;
long double には接尾辞 'L'(または 'l')を使用します。
bool リテラル
bool リテラルは 2 つだけで、true と false です。例えば、
bool done = true;
bool gameOver = false;
int i;
if (i == 9) { // true または false を返します
......
}
文字リテラル
印刷可能な char リテラルは、文字を 1 対の シングルクォート で囲んで書きます。例えば、'z'、'$'、'9'。C++ では、文字は 8 ビットの ASCII コードで表され、算術演算では 8 ビットの 符号付き整数 として扱うことができます。言い換えれば、char と 8 ビットの符号付き整数は相互に変換可能です。また、[-128, 127] の範囲の整数を char 型の変数に代入することもできます。unsigned char には [0, 255] の範囲の整数を代入できます。例えば、
char letter = 'a'; // 97 と同じ
char anotherLetter = 98; // 文字 'b' と同じ
cout << letter << endl; // 'a' が表示されます
cout << anotherLetter << endl; // 数字ではなく 'b' が表示されます
anotherLetter += 2; // 100 または 'd'
cout << anotherLetter << endl; // 'd' が表示されます
cout << (int)anotherLetter << endl; // 100 が表示されます
文字列リテラル
String リテラルは、0 個以上の文字が 1 対の ダブルクォート で囲まれて構成されます。例えば、"Hello, world!"、"The sum is "、""。例えば、
String directionMsg = "Turn Right";
String greetingMsg = "Hello";
String statusMsg = ""; // 空の文字列
例(リテラル)
/* 基本型のテスト */
#include <iostream>
using namespace std;
int main() {
char gender ='m'; // char 型はシングルクォートで囲まれます
bool isMarried = true; // true(非ゼロ) または false(0)
unsigned short numChildren = 8; // [0, 255]
short yearOfBirth = 1945; // [-32767, 32768]
unsigned int salary = 88000; // [0, 4294967295]
double weight = 88.88; // 小数部分がある
float gpa = 3.88f; // float 型には接尾辞 'f' が必要です
// "cout <<" を使用すると、任意の型の値を表示できます
cout << "Gender is " << gender << endl;
cout << "Is married is " << isMarried << endl;
cout << "Number of children is " << numChildren << endl;
cout << "Year of birth is " << yearOfBirth << endl;
cout << "Salary is " << salary << endl;
cout << "Weight is " << weight << endl;
cout << "GPA is " << gpa << endl;
return 0;
}
出力:
Gender is m
Is married is 1 // true
Number of children is 8
Year of birth is 1945
Salary is 88000
Weight is 88.88
GPA is 3.88

このパートでは、いくつかの基本型を紹介しました。変数を表現する方法と、それを操作する方法を知る必要があります。メモリ内の各型のサイズと、各型の範囲が何であるかを覚えておいてください。