1. ホーム
  2. c#

[解決済み] |=(シングルパイプイコール)、&=(シングルアンパサンドイコール)の意味するところ

2022-07-01 21:36:59

質問

以下の行で

//Folder.Attributes = FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly;
Folder.Attributes |= FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly;


Folder.Attributes |= ~FileAttributes.System;
Folder.Attributes &= ~FileAttributes.System;

は何をするのか |= (単管イコール)と &= (シングルアンパサンドイコール)は、C#ではどういう意味ですか?

システム属性を削除して、他の属性は残したいのですが...。

どのように解決するのですか?

彼らは 複合課題 演算子で、(非常に大雑把に)訳すと

x |= y;

x = x | y;

と同じように & . 暗黙のキャストに関するいくつかのケースでもう少し詳細があり、ターゲット変数は一度だけ評価されますが、基本的にはこれが要点です。

非複合演算子に関しては & はビット単位の "AND" です。 | はビット単位の "OR" です。 .

編集:この場合、あなたは Folder.Attributes &= ~FileAttributes.System . その理由を理解するために

  • ~FileAttributes.System は全属性を意味します。 を除く System " ( ~ はビットワイズNOT)
  • & は、オペランドの両側で発生する全ての属性が結果になることを意味します。

つまり、基本的にはマスクとして機能する -。 だけ に表示される属性を保持します。一般的には

  • |= は常に を追加します。 ビットをターゲットに追加します。
  • &= は常に を削除します。 ビットを削除します。