compl、~

提供: Appmethod Topics
移動先: 案内検索

キーワード(アルファベット順):インデックス への移動


カテゴリ

トークンの代替表現演算子

構文

説明

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'); // display in hexadecimal format
 
 	// the one's complement of 1 is not 0
 	cout << setw(8) << ~((unsigned long)1) << endl;
 
 	// use the alternative representation
 	cout << setw(8) << compl((unsigned long)0xff) << endl;
 
 	// the sign bit of a signed value is also inverted
 	cout << setw(8) << ~((signed long) - 1) << endl;
 
 	return 0; // put breakpoint here to see the console output
 }

コンソール出力

fffffffe
ffffff00
00000000