コンテンツにスキップ

C++/式と演算子

出典: フリー教科書『ウィキブックス(Wikibooks)』
< C++

式の概要

[編集]

式とは何か?

[編集]

プログラミングにおいて、式(expression)とは値を生成するコードの断片です。式はリテラル、変数、演算子、関数呼び出し、およびそれらの組み合わせから構成されます。式は通常、文の中で使用され、評価された結果を生成します。

式の基本的な構成要素

[編集]

式の基本的な構成要素には以下があります:

リテラル(literal)
定数値や文字、真偽値などの値そのもの。
変数(variable)
メモリ内の位置に関連付けられた名前。
演算子(operator)
値を結合したり、操作したりするための区切子(Delimiter)またはキーワード。
関数呼び出し(function call)
プログラム内の関数を実行し、結果を返す。

データ型とリテラル

[編集]

データ型の概要

[編集]

データ型は、変数や式が保持できる値の種類を定義します。C++では整数型、浮動小数点型、文字型、ブール型などの基本的なデータ型が提供されています。

整数型

[編集]

整数型は整数値を格納するために使用されます。代表的な整数型には intshortlonglong long などがあります。

浮動小数点型

[編集]

浮動小数点型は実数値を格納するために使用されます。代表的な浮動小数点型には floatdoublelong double があります。

文字型

[編集]

文字型は1文字を表すために使用されます。C++では char 型が文字型を表します。

ブール型

[編集]

ブール型は真偽値を表すために使用されます。C++では bool 型がブール型を表します。

リテラルの概要と種類

[編集]

リテラルはプログラム内で直接書かれた値のことで、そのままの値を表現します。種類には整数リテラル、浮動小数点リテラル、文字リテラル、真偽値リテラルなどがあります。

変数と代入演算子

[編集]

変数の概要と宣言方法

[編集]

変数は、プログラム内で値を格納するための名前付きメモリ領域です。変数は特定のデータ型に関連付けられ、その型の値を保持します。変数を使用するには、最初にその変数を宣言する必要があります。

C++では、変数は次のように宣言されます:

int age; // 整数型の変数ageを宣言
double height; // 浮動小数点型の変数heightを宣言
char grade; // 文字型の変数gradeを宣言
bool isStudent; // ブール型の変数isStudentを宣言

変数名の命名規則

[編集]

変数名はいくつかのルールに従って命名される必要があります:

  • 変数名はアルファベット、数字、アンダースコア(_)から構成されます。
  • 変数名は数字から始めることはできません。
  • 大文字と小文字は区別されます。
  • キーワードは変数名として使用できません。

代入演算子の使用方法

[編集]

代入演算子(=)は、変数に値を割り当てるために使用されます。左辺に変数を置き、右辺に値を置きます。代入演算子は、右辺の値を左辺の変数に格納します。

int x; // 整数型の変数xを宣言
x = 10; // xに10を代入

C++では、代入記号を使用して変数の初期化も行うことができます。

int y = 20; // 整数型の変数yを宣言して20を代入

この書式は代入と紛らわしいので、現在は下記の2つの書式がつかわれます。

int y(20); // コンストラクタを想起させる形式。
int y{20}; // 統一初期化

算術演算子

[編集]

加算(+)、減算(-)、乗算(*)、除算(/)、剰余(%)

[編集]

算術演算子は、数値を操作するために使用されます。C++には以下の算術演算子があります:

加算(+)
2つの数値を加算します。
減算(-)
左辺から右辺を引きます。
乗算(*)
2つの数値を乗算します。
除算(/)
左辺を右辺で除算します。
剰余(%)
左辺を右辺で割った余りを返します。
int a{10};
int b{3};
int sum = a + b; // 10 + 3 = 13
int difference = a - b; // 10 - 3 = 7
int product = a * b; // 10 * 3 = 30
int quotient = a / b; // 10 / 3 = 3
int remainder = a % b; // 10 % 3 = 1

算術演算子の優先順位と結合性

[編集]

算術演算子には優先順位があり、乗算や除算は加算や減算よりも優先されます。また、同じ優先順位の算術演算子は左から右に評価されます。

int result{5} + 3 * 2; // 5 + (3 * 2) = 11

比較演算子と論理演算子

[編集]

比較演算子(==、!=、<、>、<=、>=)

[編集]

比較演算子は、値を比較して真偽値を返すために使用されます。C++には以下の比較演算子があります:

等しい(==)
左辺と右辺が等しい場合にtrueを返します。
等しくない(!=)
左辺と右辺が等しくない場合にtrueを返します。
小なり(<)
左辺が右辺よりも小さい場合にtrueを返します。
大なり(>)
左辺が右辺よりも大きい場合にtrueを返します。
以下(<=)
左辺が右辺以下の場合にtrueを返します。
以上(>=)
左辺が右辺以上の場合にtrueを返します。
int x{5};
int y{3};

bool isEqual = x == y; // false
bool isNotEqual = x != y; // true
bool isLessThan = x < y; // false
bool isGreaterThan = x > y; // true
bool isLessThanOrEqual = x <= y; // false
bool isGreaterThanOrEqual = x >= y; // true

論理演算子(&&、||、!)

[編集]

論理演算子は、複数の条件式を組み合わせて、複合条件を評価するために使用されます。

論理積(&&)
両方の条件がtrueの場合にtrueを返します。
論理和(||)
少なくとも一方の条件がtrueの場合にtrueを返します。
否定(!)
条件を反転させます。
bool condition1 = true;
bool condition2 = false;

bool result1 = condition1 && condition2; // false
bool result2 = condition1 || condition2; // true
bool result3 = !condition1; // false

代入演算子の応用

[編集]

複合代入演算子(+=、-=、*=、/=、%=)

[編集]

複合代入演算子は、変数に対して演算を実行して結果をその変数に再代入します。

int x{10};
x += 5; // x = x + 5;
x -= 3; // x = x - 3;
x *= 2; // x = x * 2;
x /= 4; // x = x / 4;
x %= 3; // x = x % 3;

インクリメント(++)とデクリメント(--)

[編集]

インクリメント演算子(++)は、変数の値を1増加させます。デクリメント演算子(--)は、変数の値を1減少させます。

int count{5};
count++; // count = count + 1;
count--; // count = count - 1;

その他の演算子

[編集]

三項条件演算子(条件 ? 真の場合の値 : 偽の場合の値)

[編集]

三項条件演算子は、条件式の結果に基づいて2つの式のうちの1つを選択します。条件が真の場合は真の場合の値が返され、偽の場合は偽の場合の値が返されます。

int x{10};
int y{5};

int result = x > y ? x : y; // xがyより大きい場合はxの値が、そうでない場合はyの値がresultに代入される

ビット演算子(ビット単位の論理演算)

[編集]

ビット演算子は、整数型のビットごとの操作を実行します。ビット演算子には論理積(&)、論理和(|)、排他的論理和(^)、ビット反転(~)などがあります。

int a{0b0101}; 
int b{0b0011}; 

int resultAnd  = a & b; // 0b0001 (ビットごとの論理積)
int resultOr   = a | b; // 0b0111 (ビットごとの論理和)
int resultXor  = a ^ b; // 0b0110 (ビットごとの排他的論理和)
int resultNotA = ~a;    // 0b1010 (ビット反転)

シフト演算子(ビットのシフト操作)

[編集]

シフト演算子は、ビット列を左または右にシフトするために使用されます。左シフト演算子(<<)はビット列を左にシフトし、右シフト演算子(>>)はビット列を右にシフトします。

int num{0b0000'0101};

int resultLeftShift  = num << 2; // 0b0001'0100 (左に2ビットシフト)
int resultRightShift = num >> 1; // 0b0000'0010 (右に1ビットシフト)

式の評価順序

[編集]

式の評価順序と副作用の考慮

[編集]

式の評価順序は、式内の演算子やオペランドの位置によって決まります。ただし、C++では演算子の評価順序が定義されていますが、式の評価順序は未定義です。したがって、複雑な式を作成する際には、副作用が発生しないように注意する必要があります。

int x{5};
int y = ++x * 2; // xの値が先にインクリメントされ、その後に乗算が行われる

エラーとデバッグ

[編集]

典型的な式のエラーとその解決策

[編集]

式の作成中によく発生するエラーには、変数のスコープ外での参照、型の不一致、ゼロ除算などがあります。これらのエラーを解決するには、コードを注意深く確認し、デバッグツールを使用して問題を特定します。

デバッグツールの基本的な使用方法

[編集]

デバッグツールは、プログラムの実行中にコードを監視し、エラーや問題の原因を特定するのに役立ちます。デバッグツールを使用すると、変数の値を確認したり、ステップ実行したり、ブレークポイントを設定したりすることができます。

章のまとめと演習問題

[編集]

本章で学んだ内容の要約

[編集]

この章では、C++の式と演算子についての基本的な概念を学びました。具体的には、データ型とリテラル、変数と代入演算子、算術演算子、比較演算子、論理演算子、その他の演算子、式の評価順序、エラーとデバッグについて学びました。これらの概念を理解することで、C++プログラムの構築において基本的な式と演算子を使用することができるようになります。

実践的な演習問題の提供

[編集]
  1. 2つの整数を入力し、それらの合計と差を計算するプログラムを作成してください。
  2. 3つの浮動小数点数を入力し、それらの積を計算してください。ただし、結果は整数型で表示してください。
  3. ユーザーに2つの整数を入力させ、それらが等しい場合は"Equal"、そうでない場合は"Not equal"と表示するプログラムを作成してください。
  4. 整数型の変数 xy があります。 x が偶数か奇数かを判定し、結果を表示するプログラムを作成してください。
  5. ユーザーに半径を入力させ、その半径をもつ円の面積を計算するプログラムを作成してください。
  6. 3つの整数を入力し、それらの中で最大の数を見つけるプログラムを作成してください。