C++ シリーズ 6: 演算子

1. 算術演算子

算術演算子は、加算、減算、乗算、除算、剰余などの基本的な数学演算を実行するために使用されます。次の表に、C++ でサポートされる算術演算子のリストを示します。

オペレーター 説明
+ ++ 添加 + ++ b
− − 引き算 腹筋
∗ * 乗算 * b
/ // 分割 // _/ b
% 取模 % _b

ここで、a と b は計算される 2 つの変数または値を表します。

(1) 加算演算子

加算演算子 (+) は 2 つの値を加算するために使用されます。両方のオペランドが数値の場合、それらは加算されます。オペランドの 1 つが文字列の場合、それらは連結されます。

例えば

int a = 5;
int b = 3;
int c = a + b; // c的值为8
std::string str1 = "Hello, ";
std::string str2 = "world!";
std::string str3 = str1 + str2; // str3的值为"Hello, world!"

(2) 減算演算子

減算演算子 (-) は、最初のオペランドから 2 番目のオペランドを減算するために使用されます。

例えば

int a = 5;
int b = 3;
int c = a - b; // c的值为2

(3) 乗算演算子

乗算演算子 (*) は、2 つの数値を乗算するために使用されます。

例えば

int a = 5;
int b = 3;
int c = a * b; // c的值为15

(4) 除算演算子

除算演算子 (/) は、最初のオペランドを 2 番目のオペランドで除算するために使用されます。

例えば

int a = 6;
int b = 3;
int c = a / b; // c的值为2

C++ の整数除算は整数の結果を返す、つまり小数部分が四捨五入されることに注意してください。

(5) モジュロ演算子

モジュロ演算子 (%) は除算の余りを返します。

例えば

int a = 7;
int b = 3;
int c = a % b; // c的值为1

2. 関係演算子

関係演算子は、2 つの値を比較し、ブール値 (true または false) を返すために使用されます。次の表は、C++ でサポートされている関係演算子の一覧です。

オペレーター 説明
== 同等 a == b
!= 等しくない a != b
> 以上 a > b
< 未満 a < b
>= 以上 a >= b
<= 以下 a <= b

ここで、a と b は比較される 2 つの変数または値を表します。

(1) 等価演算子と不等号演算子

等価演算子 (==) は、2 つの値が等しいかどうかを比較するために使用されます。等しい場合は true を返し、そうでない場合は false を返します。

例えば

int a = 5;
int b = 3;
bool c = (a == b); // c的值为false

不等号演算子 (!=) は、2 つの値が等しくないかどうかを比較するために使用されます。等しくない場合は true を返し、等しくない場合は false を返します。

例えば

int a = 5;
int b = 3;
bool c = (a != b); // c的值为true

(2) 「より大きい」および「より小さい」演算子

大なり演算子 (>) は、最初のオペランドが 2 番目のオペランドより大きいかどうかを比較するために使用されます。はいの場合は true を返し、そうでない場合は false を返します。

例えば

int a = 5;
int b = 3;
bool c = (a > b); // c的值为true

小なり演算子 (<) は、最初のオペランドが 2 番目のオペランドより小さいかどうかを比較するために使用されます。はいの場合は true を返し、そうでない場合は false を返します。

例えば

int a = 5;
int b = 3;
bool c = (a < b); // c的值为false

(3) 以上および以下の演算子

以上演算子 (>=) は、最初のオペランドが 2 番目のオペランド以上であるかどうかを比較するために使用されます。はいの場合は true を返し、そうでない場合は false を返します。

例えば

int a = 5;
int b = 3;
bool c = (a >= b); // c的值为true

小なり等しい演算子 (<=) は、最初のオペランドが 2 番目のオペランド以下であるかどうかを比較するために使用されます。はいの場合は true を返し、そうでない場合は false を返します。

例えば

int a = 5;
int b = 3;
bool c = (a <= b); // c的值为false

3. 論理演算子

論理演算子は、ブール論理演算を実行するために使用されます。次の表に、C++ でサポートされる論理演算子のリストを示します。

オペレーター 説明
&& ロジックと a&&b
|| 論理的または ある
論理否定 !a

このうち、a と b は論理演算の対象となる 2 つのブール値を表します。

(1) 論理積演算子

論理 AND 演算子 (&&) は、両方の条件が true であるかどうかを確認するために使用されます。両方の条件が true の場合にのみ true を返し、それ以外の場合は false を返します。

例えば

bool a = true;
bool b = false;
bool c = (a && b); // c的值为false

(2) 論理和演算子

論理 OR 演算子 (||) は、2 つの条件のうち少なくとも 1 つが true であるかどうかを確認するために使用されます。両方の条件が false の場合にのみ false を返し、それ以外の場合は true を返します。

例えば

bool a = true;
bool b = false;
bool c = (a \|\| b); // c的值为true

(3) 論理否定演算子

論理 NOT 演算子 (!) は、ブール値を反転するために使用されます。入力が true の場合は false を返し、それ以外の場合は true を返します。

例えば

bool a = true;
bool b = !a; // b的值为false

4. ビット演算子

ビット演算子はバイナリ データを操作するために使用されます。次の表は、C++ でサポートされているビット単位の演算子のリストです。

オペレーター 説明
& ビットごとの AND aとb
| ビットごとまたは ある
^ ビット単位の XOR a ^ b
取反 ~a
<< 左に移動 a << b
>> 右に動く a >> b

このうち、a と b はビット演算の対象となる 2 つの整数を表します。

(1) ビット単位の AND 演算子

ビット単位の AND 演算子 (&) は 2 つの 2 進数の各ビットを比較し、両方のビットが 1 の場合はそのビットに 1 を出力し、それ以外の場合は 0 を出力します。

例えば

int a = 5; // 二进制表示为101
int b = 3; // 二进制表示为011
int c = a & b; // c的值为1,二进制表示为001

(2) ビット単位の OR 演算子

ビット単位の OR 演算子 (|) は 2 つの 2 進数の各ビットを比較し、いずれかのビットが 1 の場合はそのビットに 1 を出力し、それ以外の場合は 0 を出力します。

例えば

int a = 5; // 二进制表示为101
int b = 3; // 二进制表示为011
int c = a \| b; // c的值为7,二进制表示为111

(3) ビットごとの XOR 演算子

ビットごとの XOR 演算子は、2 つの整数のバイナリ表現を XOR 演算して、新しい整数を返します。2 つのビットが同じ場合、ビットの結果は 0 になり、そうでない場合は 1 になります。

例えば

int a = 5; // 二进制 101
int b = 3; // 二进制 011
int c = a ^ b; // 二进制 110 (即十进制 6)

(4) ビットごとの反転演算子

ビットごとの否定演算子は、整数のバイナリ表現を反転し、新しい整数を返します。結果は、ビットが 0 の場合は 1、それ以外の場合は 0 になります。

例えば

int a = 5; // 二进制 101
int b = ~a; // 二进制 010 (即十进制 2)

(5) 左シフト演算子

左シフト演算子は、整数のバイナリ表現を指定されたビット数だけ左にシフトし、新しい整数を返します。n ビット左にシフトすることは、この数値を 2 の n 乗倍することと同じです。

例えば

int a = 5; // 二进制 101
int b = a << 1; // 二进制 1010 (即十进制 10)

(6) 右シフト演算子

右シフト演算子は、整数のバイナリ表現を指定されたビット数だけ右にシフトし、新しい整数を返します。n ビット右シフトは、数値を 2 の n 乗で割ることと同じです。

例えば

int a = 5; // 二进制 101
int b = a >> 1; // 二进制 10 (即十进制 2)

5.アドレス演算子を取る

C++ では、address-of 演算子は変数またはオブジェクトのメモリ アドレスを取得するために使用され、次のように表現され、&任意の変数、ポインタ、またはオブジェクトに適用できます。address-of 演算子を使用して、プログラム内のメモリとデータ構造を効率的に管理します。

address-of 演算子の一般的な構文は次のとおりです。

&variable // 获取变量的地址

&object // 获取对象的地址

&type // 获取类型的地址

このうち、「変数」はアドレスを取得する変数を示し、「オブジェクト」はアドレスを取得するオブジェクトを示し、「タイプ」は取得するアドレスの種類を示す。

例えば

int a = 10;
int* ptr = &a; // 使用取地址运算符获取变量a的地址,并将其存储在指针ptr中

cout << "The value of a is: " << a << endl;
cout << "The address of a is: " << &a << endl;
cout << "The value of ptr is: " << ptr << endl;
cout << "The value pointed to by ptr is: " << *ptr << endl;

上記のコードは、まず整数変数 "a" を定義し、次に address-of 演算子を使用して&そのアドレスを取得し、それをポインタ "ptr" に格納します。次に、変数「a」の値とアドレス、ポインタ「ptr」の値、およびポインタが指す値を出力します。

出力は次のようになります。

a の値: 10
a のアドレス: 0x7fff5fbff7dc
ptr の値: 0x7fff5fbff7dc
ptr が指す値: 10

出力からわかるように、変数「a」のアドレスはポインタ「ptr」の値と同じであり、ポインタが指す値も変数「a」の値と同じです。

6. コンテンツのフェッチ演算子

C++ では、 content 演算子は、 として示されるポインターが指す値を取得するために使用され*、任意のポインター変数に適用できます。

content 演算子の一般的な構文は次のとおりです。

*pointer // 获取指针所指向的值

このうち「ポインタ」は値を取得する対象となるポインタ変数を示します。

例えば

int a = 10;
int* ptr = &a; // 使用取地址运算符获取变量a的地址,并将其存储在指针ptr中

cout << "The value of a is: " << a << endl;
cout << "The value pointed to by ptr is: " << *ptr << endl;

上記のコードは、まず整数変数 "a" を定義し、次に address-of 演算子を使用して&そのアドレスを取得し、それをポインタ "ptr" に格納します。次に、変数「a」の値とポインタ「ptr」が指す値を出力します。

出力:

a の値: 10
ptr が指す値: 10

出力からわかるように、ポインタ「ptr」が指す値は変数「a」の値と同じです。

7. メンバーセレクター

C++ では、クラスのメンバー変数およびメンバー関数にアクセスするためにメンバー セレクターが使用されます。これは.(ドット) で示され、定義された任意のオブジェクトに適用できます。オブジェクト指向プログラミングは、メンバー セレクターを使用してオブジェクトのメンバーを操作および変更することによって実現できます。

メンバー セレクターの一般的な構文は次のとおりです。

object.member // 访问成员变量或成员函数

このうち「オブジェクト」はメンバにアクセスするオブジェクトを示し、「メンバ」はアクセスするメンバ変数またはメンバ関数を示します。

例えば

class MyClass {
    
    
public:
  int myVar;
  void myFunc() {
    
    
    cout << "Hello, world!" << endl;
  }
};

MyClass obj; // 创建MyClass对象

obj.myVar = 42; // 使用成员选择符访问myVar成员变量
cout << "The value of myVar is: " << obj.myVar << endl;

obj.myFunc(); // 使用成员选择符调用myFunc成员函数

上記のコードは、まず「MyClass」という名前のクラスを定義します。このクラスには、整数型のメンバー変数「myVar」と、パラメーターも戻り値も持たないメンバー関数「myFunc」が含まれています。次に、「obj」という MyClass オブジェクトが作成され、メンバー セレクターを使用してそのメンバー変数とメンバー関数にアクセスします。

出力:

myVar の値は次のとおりです: 42
Hello, world!

出力からわかるように、メンバー セレクターを使用して、MyClass オブジェクトのメンバー変数とメンバー関数にアクセスすることができました。

メンバー セレクターは、構造体およびクラス ポインターが指すメンバーにアクセスする->ために使用されます。通常、オブジェクトを作成して操作を実行するために、新しい動的メモリ割り当て機能と組み合わせて使用​​されます。

例えば

struct Person {
    
    
    std::string name;
    int age;
};

int main() {
    
    
    // 创建Person结构体指针p
    Person *p = new Person();

    // 通过成员选择符->访问p所指向的name成员变量
    p->name = "John";

    // 通过成员选择符->访问p所指向的age成员变量
    p->age = 30;

    delete p;
    return 0;
}

上記のコードは、動的メモリに新しい Person 構造体を割り当て、ポインタ p としてそれにアクセスします。次に、メンバー セレクターを使用して、ポインター p が指す名前と年齢のメンバー->にアクセスします。

プレーン オブジェクト (つまり、ポインターではない) を操作する場合は.->メンバーにアクセスするのではなくピリオドを使用する必要があることに注意してください。

8. スコープ演算子

C++ スコープ演算子は、クラス、名前空間、構造体、または列挙型のメンバーにアクセスしたり、グローバル変数や関数にアクセスしたりするため::に使用されます。

C++ では、スコープ演算子を使用して、同じ名前のメンバーまたは変数を区別し、アクセスする必要がある特定のメンバーまたは変数を指定できます。たとえば、クラスにそのスーパークラスと同じ名前のメンバーがある場合、スコープ演算子を使用してこのクラスによって定義されたメンバーにアクセスできますが、そのスーパークラス内のメンバーにはアクセスできません。さらに、スコープ演算子を使用すると、同じ関数を複数のソース ファイルに実装するときに、グローバル名前空間とローカル名前空間を分離できます。

たとえば、クラスのメンバーにアクセスする場合

class A {
    
    
public:
    int x;
};

class B : public A {
    
    
public:
    int x;
};

int main() {
    
    
    B b;
    b.A::x = 5; // 访问A类中的x成员
    b.x = 10;   // 访问B类中的x成员

    return 0;
}

たとえば、名前空間内の変数または関数にアクセスします。

namespace MyNamespace {
    
    
    int x = 5;

    void printX() {
    
    
        std::cout << "x = " << x << std::endl;
    }
}

int main() {
    
    
    MyNamespace::printX(); // 访问MyNamespace中的printX函数
    std::cout << "MyNamespace::x = " << MyNamespace::x << std::endl; // 访问MyNamespace中的x变量

    return 0;
}

たとえば、グローバル変数にアクセスします。

int x = 10;

int main() {
    
    
    int x = 5;
    std::cout << "局部变量x = " << x << std::endl;

    std::cout << "全局变量x = " << ::x << std::endl; // 访问全局命名
}

9. まとめ

20年前の素朴なC++言語学習記録

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/apr15/article/details/130568664