記事ディレクトリ
序文
変数は、基本的にすべてのプログラミング言語の基礎であり、プロジェクトが構築される基礎です。
次のコードは、変数を宣言します。
// int就是变量的类型
// num就是变量名
// 0就是num的初始值
int num = 0;
記憶と理解を容易にするために、型と変数名を比較します。
- 中に物が入った木箱とイメージできます。クレートは変数名で、アイテムはデータです。
- リンゴ、ナシ、バナナなど、木箱にどのようなアイテムが入っているかは、変数の型、int、short、long に対応しています。
1.変数名
C++ 変数名には次の命名規則があります (ここでは、C++ Primer Plus の第 6 版の中国語バージョン 3.1.1 の内容を直接伝えます)。
- 名前に使用できるのは、英字、数字、アンダースコア (_) のみです
- 名前の最初の文字を数字にすることはできません
- 大文字と小文字を区別します (例: int A と int a は 2 つの異なる変数名です)。
- C++ キーワードを名前として使用できません
- 2 つのアンダースコアまたはアンダースコアと大文字で始まる名前は、実装 (コンパイラとそれが使用するリソース) のために予約されています。アンダースコアで始まる名前は、グローバル識別子として使用するために実装に予約されています。(人間的に言えば、変数名として _time_stop, _Donut のような組み合わせを使用しないのが最善です)
- C++ には名前の長さに制限がなく、名前のすべての文字が意味を持ちます。ただし、一部のプラットフォームには長さ制限があります
一般的な変数名は「 my_name」や「myName 」のように書くことができ、私は myName の形で書くことに慣れています。
2. 変数型
C++ の変数の型は何ですか?
基本データ型
// 整型
int,short,long,long long
// 浮点型
float,double,long double
// 字符类型
char
// 布尔类型
bool
列挙型、ポインター、配列、参照、クラスなどの型もありますが、後で順を追って説明します。
2.1 整数
整数には、short、int、long、long long の 4 種類があります。
#include<iostream>
int main() {
short var_short = 22;
int var_int = 123;
long var_long = 1234l; // 后缀l,表示long
long long var_long_long = 12345ll; // 后缀ll,表示long long
return 0;
}
2.1.1 初期化
#include<iostream>
int main() {
// 声明一个int类型的变量,但是不初始化
int var; // 不建议这样做
// 声明一个int类型的变量并且初始化为22
int var = 22;
return 0;
}
変数を宣言するには 2 つの方法があり、1 つ目は初期化を行わずに宣言する方法と、2 つ目は宣言して初期化する方法です。最初の方法は使用しないでください。C++ の場合、手動で初期化しないと、変数の値がランダム メモリ データになり、Visual Studio のエラーが直接報告されるためです。
error C4700: 使用了未初始化的局部变量“var”
Java の自動初期化とは異なり、C++ の変数を宣言する場合は、変数を手動で初期化することを忘れないでください。
2.1.2 値の範囲
32 ビット オペレーティング システムでの int、short、long、long long の型の最大値と最小値は? それらはどのくらいのメモリを占有しますか?
整数が占めるサイズについては、C++ Primer Plus 6th edition Chinese version 3.1.3 の内容を参照してください。
- 少なくとも 16 ビットを短くする
- int は少なくとも short と同じ長さです
- long は少なくとも 32 ビット長で、少なくとも int と同じ長さです
- long long は少なくとも 64 ビットの長さであり、少なくとも long と同じ長さです
異なるシステムが占有するメモリ サイズは異なるため、現在のシステム タイプが占有するメモリ サイズをどのように知るのでしょうか? sizeof() を使用して、占有されているメモリ サイズを取得できます。
#include<iostream>
int main() {
// windows 10,Visual Studio 2022,Debug模式,x86
std::cout << sizeof(int) << std::endl;
std::cout << sizeof(short) << std::endl;
std::cout << sizeof(long) << std::endl;
std::cout << sizeof(long long) << std::endl;
return 0;
}
出力結果:
4
2
4
8
では、最大値と最小値を決定する方法は? また、C++ が提供するツール climits と cstdint (C++11) のマクロ定数を使用して決定することもできます。
参照 API アドレス: C++ 標準ライブラリ ヘッダー ファイルの数値制限
#include<iostream>
#include<climits>
int main() {
// windows 10,Visual Studio 2022,Debug模式,x86
std::cout << "short最小值: " << SHRT_MIN << std::endl;
std::cout << "short最大值: " << SHRT_MAX << std::endl;
std::cout << "int最小值: " << INT_MIN << std::endl;
std::cout << "int最大值: " << INT_MAX << std::endl;
std::cout << "long最小值: " << LONG_MIN << std::endl;
std::cout << "long最大值: " << LONG_MAX << std::endl;
std::cout << "long long最小值: " << LLONG_MIN << std::endl;
std::cout << "long long最大值: " << LLONG_MAX << std::endl;
return 0;
}
出力結果:
short最小值: -32768
short最大值: 32767
int最小值: -2147483648
int最大值: 2147483647
long最小值: -2147483648
long最大值: 2147483647
long long最小值: -9223372036854775808
long long最大值: 9223372036854775807
2.1.3 データ型のオーバーフロー
ある種類のデータを使用すると、そのデータ型の最大値または最小値に達しますが、データを増やしたり減らしたりすると、逆の最大値または最小値にデータが到達します。
コードに直接、ナンセンスはありません:
#include<iostream>
#include<climits>
int main() {
int max_var = INT_MAX;
std::cout << "int最大值: " << max_var << std::endl;
max_var = max_var + 1; // 模拟溢出
std::cout << "int最大值溢出: " << max_var << std::endl;
int min_var = INT_MIN;
std::cout << "int最小值: " << min_var << std::endl;
min_var = min_var - 1; // 模拟溢出
std::cout << "int最小值溢出: " << min_var << std::endl;
return 0;
}
出力:
int最大值: 2147483647
int最大值溢出: -2147483648
int最小值: -2147483648
int最小值溢出: 2147483647
データ型オーバーフローのコードは、オーバーフローを防ぐために基本的なデータ型を扱う際に境界問題の判断を考慮するよう警告しています。
2.1.4 符号なし型
unsigned 型は、int、short、long、long long の 4 つの整数型のうち、short 型などの unsigned 型 unsigned です。
#include<iostream>
#include<climits>
int main() {
unsigned short var = USHRT_MAX;
std::cout << var << std::endl;
var = var + 1; // 模拟溢出
std::cout << var << std::endl;
return 0;
}
出力:
65535
0
元の short 型は -32768 から +32767 です. unsigned 型の short は負の数を犠牲にして正の数のみを取ります. 範囲は 0~65535. unsigned (unsigned) 型は正の数のみを表します.
2.2 浮動小数点
浮動小数点型には主に float、double、long double があります.整数型との違いは小数点があることです.コードは次のようになります.
#include<iostream>
#include<climits>
int main() {
float var_f = 1.234f;
float var0_f = 3.14e+5; // 3.14乘以10000,科学计数法
double var_d = 2.345;
long double var_ld = 2.365234;
std::cout << var0_f << std::endl;
return 0;
}
2.2.1 値の範囲
#include<iostream>
int main() {
// windows 10,Visual Studio 2022,Debug模式,x86
std::cout << sizeof(float) << std::endl;
std::cout << sizeof(double) << std::endl;
std::cout << sizeof(long double) << std::endl;
return 0;
}
出力:
4
8
8
2.2.2 最大値と最小値
float、double、long double の最大値と最小値:
#include<iostream>
#include<cfloat>
int main() {
// windows 10,Visual Studio 2022,Debug模式,x86
std::cout << "float最小值: " << FLT_MIN << std::endl;
std::cout << "float最大值: " << FLT_MAX << std::endl;
std::cout << "double最小值: " << DBL_MIN << std::endl;
std::cout << "double最大值: " << DBL_MAX << std::endl;
std::cout << "long double最小值: " << LDBL_MIN << std::endl;
std::cout << "long double最大值: " << LDBL_MAX << std::endl;
return 0;
}
出力:
float最小值: 1.17549e-38
float最大值: 3.40282e+38
double最小值: 2.22507e-308
double最大值: 1.79769e+308
long double最小值: 2.22507e-308
long double最大值: 1.79769e+308
2.3 文字種
文字型は char で、コードは次のとおりです。
#include<iostream>
int main() {
// windows 10,Visual Studio 2022,Debug模式,x86
char ch0 = 'a';
char ch1 = 'A';
char ch2 = 97;
char ch3 = 65;
std::cout << ch0 << std::endl;
std::cout << ch1 << std::endl;
std::cout << ch2 << std::endl;
std::cout << ch3 << std::endl;
return 0;
}
出力:
a
A
a
A
焦点は ch2 と ch3 で、char データには整数を割り当てることができ、97 と 65 は ASCII で a と A を表します。char 型のこの機能により、char 型を使用する一部のアルゴリズムの問題は、足し算と引き算で整数型を使用して解決できます。
#include<iostream>
int main() {
// windows 10,Visual Studio 2022,Debug模式,x86
char ch = 97;
for (int i = 0; i <= 25; i++) {
std::cout << ch << std::endl;
ch = ch + 1;
}
return 0;
}
2.4 ブール値
ブール型は非常に単純で、2 つの値のみです。0 および非ゼロ。0 は false を表し、非ゼロ (通常は 1) は true を表します。
#include<iostream>
int main() {
// windows 10,Visual Studio 2022,Debug模式,x86
bool flag0 = true;
std::cout << flag0 << std::endl;
bool flag1 = false;
std::cout << flag1 << std::endl;
return 0;
}