最初の質問:
|
は、ビット単位で行いますか。第1の値または第2の値に設定されている場合、結果にビットが設定されます。 (enums
でそれを使用して、他の値の組み合わせである値を作成します)ビット単位でおよびを使用する場合は、それほど意味をなさないでしょう。それは、次のように
を使用します:
[Flags]
enum FileAccess{
None = 0, // 00000000 Nothing is set
Read = 1, // 00000001 The read bit (bit 0) is set
Write = 2, // 00000010 The write bit (bit 1) is set
Execute = 4, // 00000100 The exec bit (bit 2) is set
// ...
ReadWrite = Read | Write // 00000011 Both read and write (bits 0 and 1) are set
// badValue = Read & Write // 00000000 Nothing is set, doesn't make sense
ReadExecute = Read | Execute // 00000101 Both read and exec (bits 0 and 2) are set
}
// Note that the non-combined values are powers of two, \
// meaning each sets only a single bit
// ...
// Test to see if access includes Read privileges:
if((access & FileAccess.Read) == FileAccess.Read)
を基本的にenum
内の特定のビットが設定されている場合、あなたがテストすることができます。この場合、Read
に対応するビットがセットされているかどうかを調べるためにテストしています。値Read
とReadWrite
はどちらもこのテストに合格します(両方ともビットゼロが設定されています)。 Write
はそうではありません(ビット0が設定されていません)。
// if access is FileAccess.Read
access & FileAccess.Read == FileAccess.Read
// 00000001 & 00000001 => 00000001
// if access is FileAccess.ReadWrite
access & FileAccess.Read == FileAccess.Read
// 00000011 & 00000001 => 00000001
// uf access is FileAccess.Write
access & FileAccess.Read != FileAccess.Read
// 00000010 & 00000001 => 00000000
2番目の質問:
私はあなたが言うときだと思う "および/または" あなたが意味する "1を、他のまたは両方"。これはまさに||
(または演算子)の機能です。 「どちらか一方ではなく、両方ではない」と言う場合は、^
(排他的または操作者)を使用します。
真理値表(真== 1、偽== 0):
A B | A || B
------|-------
OR 0 0 | 0
0 1 | 1
1 0 | 1
1 1 | 1 (result is true if any are true)
A B | A^B
------|-------
XOR 0 0 | 0
0 1 | 1
1 0 | 1
1 1 | 0 (if both are true, result is false)
私は、あなたの質問をうまくすることはできませんどのように何かをすることができ、およびまたは?確かに、それはちょうどか? – Mez
@マーティン - 私は彼が口頭の言い回し "および/または" – Dana