Frage

Ich lese über Flag Aufzählungen und Bit-Operatoren, und kam in diesem Code:

enum file{
read = 1,
write = 2,
readandwrite = read | write
}

Ich habe irgendwo gelesen, warum gibt es eine inklusive oder Erklärung und wie kann es eine & nicht sein, sondern kann den Artikel nicht finden. Kann jemand bitte mein Gedächtnis aufzufrischen und die Argumentation erklären?

Auch, wie kann ich sagen, und / oder? Z.B. wenn Auswahlliste1 = "Hallo" und / oder dropdown2 = "Hallo" ....

Danke

War es hilfreich?

Lösung

Erste Frage:

Ein | hat eine bitweise oder; ein Bit wird in der Folge gesetzt werden, wenn es in dem ersten Wert oder den zweiten Wert eingestellt ist. (Sie verwenden es auf enums Werte zu schaffen, die Kombinationen von anderen Werten sind) Wenn Sie eine bitweise verwenden waren und, wäre es nicht sehr viel Sinn machen.

Es wird verwendet wie folgt:

[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)

Im Wesentlichen können Sie testen, ob bestimmte Bits in einem enum eingestellt sind; in diesem Fall testen wir auf einen Read wenn die Bits, um zu sehen entsprechenden eingestellt sind. Werte Read und ReadWrite würde sowohl diesen Test bestehen (die beide Bit Null gesetzt); Write würde nicht (es nicht Bit Null gesetzt hat).

// 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

Zweite Frage:

Ich denke, wenn Sie sagen, „und / oder“, meint du „ein, die andere oder beide“. Das ist genau das, was der || (oder Betreiber) der Fall ist. Zu sagen, „das eine oder das andere, aber nicht beide“, dann würden Sie ^ (die exklusive oder opertor) verwenden.

Wahrheitstabellen (true == 1 false == 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)

Andere Tipps

Das oben oder ist eine bitweise oder keine logische oder. 1 | 2 entspricht 3 (bei 1, 2 = 0).

Siehe http://en.wikipedia.org/wiki/Bitwise_operation für eine bessere Erklärung über bitweise Operationen.

Aufzählungstypen . Schauen Sie sich die Aufzählungstypen wie Bitflags Abschnitt, es gibt ein Beispiel ein OR sowie ein Beispiel für ein AND NOT b.

Nun, es gibt zwei verschiedene Fragen hier, aber # 2, die logischen ODER-Verknüpfung als gefunden in den meisten Programmiersprachen zu beantworten ist, was Sie mit und / oder, denke ich.

if (dropdown == "1" || dropdown == "2") // Works if either condition is true.

Exklusiv-Oder aber bedeutet „Die eine oder andere aber nicht beide“.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top