C++の単項演算子とは?種類と使い方を徹底解説
単項演算子とは
単項演算子とは、たった1つのオペランドに対して作用し、新しい値を生成する演算子のことです。C++にはさまざまな単項演算子が用意されており、それぞれ異なる役割を持っています。本記事では、代表的な単項演算子の種類とその動作について詳しく解説します。
C++の主な単項演算子一覧
- 間接参照演算子(*) - ポインタ変数に対して作用し、ポインタが指すアドレス上の値と等価なl値を返します。この操作は「デリファレンス(参照外し)」とも呼ばれます。
- アドレス演算子(&) - オペランドのアドレスを取得します。オペランドには、関数指定子、またはビットフィールドではなくregister記憶クラス指定子付きでも宣言されていないオブジェクトを指すl値を指定できます。
- 単項プラス演算子(+) - オペランドの値をそのまま返す演算子です。オペランドは算術型である必要があります。
- 単項マイナス演算子(-) - オペランドの値の符号を反転させます。オペランドには任意の算術型を指定できますが、結果はl値にはなりません。
- 論理否定演算子(!) - オペランドの意味(真偽)を反転させます。オペランドは算術型またはポインタ型(あるいはそれらに評価される式)である必要があり、暗黙的にbool型へ変換されます。
- 1の補数演算子(~) - 「ビットごとの補数」や「ビット単位のNOT」とも呼ばれ、オペランドのビットごとの1の補数を生成します。オペランドは整数型である必要があります。
- 前置インクリメント演算子(++) - オペランドに1を加算し、その増加後の値が式の結果となります。オペランドはconst型ではないl値である必要があり、結果はオペランドと同じ型のl値になります。
- 前置デクリメント演算子(--) - オペランドから1を減算し、その減少後の値が式の結果となります。こちらもオペランドはconst型ではないl値である必要があります。
- キャスト演算子(()) - 特定の状況において、オブジェクトの型を明示的に変換する手段を提供します。キャストが行われると、コンパイラはキャスト式を指定された型として扱います。
- sizeof演算子 - コンパイル時に評価される単項演算子で、オペランドのサイズ(バイト数)を計算するために使用できます。
- new演算子 - メモリを動的に割り当てるためのメモリ確保演算子です。
- delete演算子 - 動的に割り当てられたメモリを解放するための演算子です。
これらの単項演算子は、いずれも右から左への結合規則(右結合性)を持ちます。また、単項式は一般的に、後置式や基本式の前に配置される構文をとります。
使用例
ここでは、単項マイナス演算子(-)とキャスト演算子(())を使った具体的な例を見てみましょう。
#include<iostream>
using namespace std;
int main() {
int x;
float y = 1.23;
x = (int) y;
x = -x;
cout << x;
return 0;
}
実行結果
このプログラムを実行すると、以下の出力が得られます。
-1
このコードでは、まずfloat型の変数y(値は1.23)を(int)でキャストしてint型に変換し、小数点以下が切り捨てられた1がxに代入されます。その後、単項マイナス演算子によって符号が反転されるため、最終的な出力結果は-1となります。
-
C++の関係演算子とは?種類と使い方を実例付きで解説
C++プログラミングでは、2つの変数に格納された値を比較し、両者の大小関係や等価性を判定するために関係演算子を使用します。関係演算子は、if文などの条件分岐やfor文・while文などのループ処理において不可欠な要素であり、比較の結果はbool型(true / false)として返されます。C++で利用できる主な関係演算子は以下の通りです。演算子説明>より大きい(左辺が右辺より大きいか)>=以上(左辺が右辺以上か)<より小さい(左辺が右辺より小さいか)<=以下(左辺が右辺以下か)==等しい(左右の値が等しいか)!=等しくない(左右の値が異なるか)関係演算子の使い方これら
-
C++の算術演算子入門!基本の5つの演算子と複合代入演算子の使い方
C++の基本的な算術演算子 C++には、数値計算のために用意された基本的な算術演算子が5つあります。それぞれ以下の通りです。 加算(+) 減算(-) 乗算(*) 除算(/) 剰余(%) 使用例 これらの演算子は、C++のあらゆる算術演算に使用できます。実際にどのように動作するのか、以下のサンプルコードで確認してみましょう。 #include <iostream> using namespace std; int main() { int a = 21; int b = 10; int c; c = a + b; cout <&l