0

|= 演算子とは何か、それがどのように機能するかを説明しようとするドキュメントと回答(1) (2)を見てきましたが、基本的なレベルでは理にかなっていますが...理由や理由がよくわかりませんそれが何をどのように達成するか。

説明でa |= bは と同等であると書かれていますが、それ自体の値 ( ) または の値a = a | bを与えるかどうかを評価する方法がわかりません。私の理解では、「または」は、2 つのうちの 1 つになる可能性があることを意味しますが、2 つのうちのどちらであるかは指定されていません。aab

Visual Studio では、Refactoring Essentials という拡張機能を使用しています。この拡張機能では、コードの一部を |= 演算子を含む行に置き換えることを提案されています。コードはその中の演算子で機能しますが、それがどのように機能するのかわかりません。 、これが私がオンラインで調査しようとするきっかけとなったものです(結果として、この質問をします).

私のコードは

if (MessageBox.Show("Are you sure you want to cancel this operation?", "Confirm Cancel", MessageBoxButton.YesNo, MessageBoxImage.Exclamation, MessageBoxResult.No) == MessageBoxResult.No)
{
    e.Cancel = true;
}

e.Cancel |= MessageBox.Show("Are you sure you want to cancel this operation?", "Confirm Cancel", MessageBoxButton.YesNo, MessageBoxImage.Exclamation, MessageBoxResult.No) == MessageBoxResult.No;

それでも機能しました。e.Cancelの評価に基づいて決定されると思いMessageBox.Show(...) == MessageBoxResult.Noますが、 |= 演算子が必要な理由はわかりません。e.Cancel式の結果はブール値であり、ブール値を取るため、標準の代入 (=) 演算子を使用しないのはなぜですか? 条件付き (? :) 演算子を使用する場合はどうでしょうか。|= はそれとどのように比較されますか?

4

1 に答える 1

7

|はBITWISE OR演算子であり、BOOLEAN OR演算子ではありません。

2 つの 8 ビット 2 進数 10110100 と 11000101 があるとします。

それらをビットごとに ORすると1、最初の OR 2 番目の入力でビットが設定されている各位置の出力にビットが設定され、02 つの入力ビットのいずれも設定されていないビットが設定されます。

10110100 
11000101
--------
11110101

それだけです。

はご存知のとおり、x |= y;とまったく同じx = x | y;です。

注意すべき最後の点は、が に適用された場合のおよびビット単位の操作のために、= true および= falseboolである 1 ビットの数値であるかのように扱われることです。10|&bool

boolただし、intビット単位の操作を混在させることはできないことに注意してください。たとえば、次の場合はコンパイル エラーが発生します。

bool t = true;
bool f = false;
int x = t | f; // Error: Cannot implicitly convert type 'bool' to 'int'

補遺:

&=人々がand |=for を 使用する理由boolは、より論理的 (しゃれが意図されている)&&=と思われるものではなく||=、後者の 2 つの演算子が実際には存在しないためです!

于 2016-04-26T09:38:47.667 に答える