compl、~
カテゴリ
構文
説明
compl 演算子は、~ 演算子(ビット NOT)の代替表現です。
compl という単語は、complement(補数)の省略形です。
~ のオペランドは、整数または列挙型でなければなりません。 結果は、オペランドの 1 の補数です。 汎整数拡張が行われます。
論理値を反転するには、論理否定(演算子 !)を使用してください。
結果の型は、拡張されたオペランドの型になります。
~X() という単項式(X はクラス名)は、一意に決まらない場合があります。 このあいまい性を解決するために、~X をデストラクタとして扱うよりも、~ を単項補数演算子として扱う方が優先されます。
~ の代わりに compl を使用するには、[新しい演算子名を有効にする]オプション(-VM
コンパイラ スイッチ。[<プロジェクト> のプロジェクト オプション]ダイアログ ボックスの[互換性]ページで設定可能)を設定する必要があります。
例
次のコードは、C++ コンソール アプリケーションのものです。 出力される値はすべて 16 進法です。
#include <tchar.h>
#include <iostream>
#include <iomanip>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]) {
cout << hex << setfill('0'); // 16 進数形式で表示
// それの 1 の補数は 0 ではない
cout << setw(8) << ~((unsigned long)1) << endl;
// 代わりの表現を使用
cout << setw(8) << compl((unsigned long)0xff) << endl;
// 符号値の符号ビットは戻された
cout << setw(8) << ~((signed long) - 1) << endl;
return 0; // ここにブレークポイントを置いてコンソールの出力を確認
}
コンソール出力
fffffffe ffffff00 00000000