2010-07-22 15 views
36

Ich habe diese Aussage in Java bekommt:Pipe (|) Operator in Java

System.out.println(3|4); 

Warum ist der Ausgang 7?

+1

Was hast du erwartet? Und warum? – EJP

+0

@EJP: Der Zweck der Operatornotation in Programmiersprachen ist es, die gleiche Notation in unseren Programmen zu verwenden, die wir für den Rest unseres Lebens verwenden. Der senkrechte Balken bedeutet normalerweise * ist teilbar durch *, also kann ich, obwohl ich nicht für das OP sprechen kann, erwarten, dass das Ergebnis von '3 | 4 '' falsch 'und nicht' 7 'ist und ich vermute das ziemlich genau Jeder, der Mathe in der High School nahm, würde das Gleiche erwarten. –

+2

Hier in den USA, wo Java spezifiziert wurde, hat ein vertikaler Balken nichts mit Division zu tun. Wir verwenden horizontale Balken (manchmal mit Punkten oben und unten) und in seltenen Fällen einen Schrägstrich. Niemals eine vertikale Linie. –

Antwort

75

Es ist eine bitweise ODER-Verknüpfung. Es ändert Dinge auf einer binären Ebene.

   011      3 
in binary: | 100  in decimal: | 4 
      ___     ___ 
      111      7 

Öffnen Sie Windows calc im wissenschaftlichen Modus. Sie können zwischen dezimal und binär (und hex) umschalten und bitweise Operationen einschließlich oder, und, xor usw. durchführen.

Um eine bitweise oder in Ihrem Kopf oder auf dem Papier zu tun, vergleichen Sie jede Ziffer der gleichen Ordnungszahl. Wenn jede Zahl eine 1 ist, wird das Ergebnis in diesem Ordnungs 1.

10

Es ist eine bitwise OR Betrieb zu tun, und 3 OR 4 7.

Siehe hier: http://en.wikipedia.org/wiki/Bitwise_OR#OR

+3

In der Tat. Um die Erklärung von dcp etwas zu erweitern, wird in Java eine einzelne Pipe, '|', als "Bitwise OR" bezeichnet. Das bedeutet, dass es eine ODER-Verknüpfung auf den tatsächlichen Bits durchführt, die die Argumente bilden. In diesem Fall ist 3 "0011" und 4 ist "0100" (die wenigsten 4 signifikanten Bits sind gezeigt). Ein bitweises OR geht durch jedes Bit und setzt es auf eine 1, wenn * entweder * der Bits 1 ist, in diesem Fall erhalten Sie "0111", oder 7. Was wollten Sie eigentlich ausdrucken, oder war das ein Beispiel? aus einem Buch/Tutorial? – Stephen

+0

-1: Der Zweck von SO ist, die definitive Antwort zu erstellen. Das erklärt nicht, warum '3 | 4 == 7' –

+0

danke für die Beantwortung – bentham

39

sein Operator | hat eine „bitweise OR“. Der Ausgang der bitweisen oder auf zwei Bits 1 ist, wenn entweder das Bit 1 oder 0 ist, wenn beide Bits 0 Bitweise oder auf zwei Zahlen sind macht genau eine bitweise ODER für jedes Bit einzeln.

Heres, wie 3|4 Werke:

3: 00000011 
    4: 00000100 
-------------- 
3|4: 00000111 = 7 
+1

+1: die Demonstration von '12 | 10' könnte ein genaueres Beispiel für den bitweisen Operator sein. Obwohl das OP hier speziell nach '3 | 4' fragt –

4

| ist der "bitweise oder" Operator. in A | B, wenn n-te Bit von A und/oder b 1 ist, wird der n-te Bit des Ergebnisses seine 1. 3 11 in binär ist. 4 ist 100 in binär.

0 1 1 
or or or 
1 0 0 
= = = 
1 1 1 

Und 111 ist die binäre Darstellung von 7.

8

Binärdarstellung:

3 = 00000011 
4 = 00000100 

| is bitwise OR operator 

, wenn Sie oder zwei Zahlen, nehmen Sie die binäre Darstellung und das OR Ergebnis ist 1 IFF für diese Spalte mindestens eine Spalte true gesetzt (1)

So

00000011 
00000100 
-------- 
00000111 

dann, sagen Spalten Sie den Wert an dieser Position:

128, 64, 32, 16, 8, 4, 2, 1 

so

128, 64, 32, 16, 8, 4, 2, 1 
0 , 0, 0, 0, 0, 1, 1, 1 

jede Spalte mit einer 1 bedeutet, dass Sie den Spaltenwert hinzu:

4 + 2 + 1 = 7 
2

Als Bitoperatoren kann ein wenig verwirrend sein, ohne etwas davon zu korrelieren, um die Art und Weise I‘ Ihre Funktion erklärten Nicht-Programmierer sogar, dass Sie einfach 1 für wahr und 0 für falsch setzen, und dann verhalten sie sich wie die Operatoren in der englischen Sprache:

der Mond ist blau und der Himmel ist blau, ist falsch

0 und 1 0

der Mond ist blau oder der Himmel blau ist, ist wahr

0 oder 1 ist 1

aber die Analogie bricht, wenn ich zu bekommen:

das Meer ist blau XOR die Bäume grün sind, ist falsch

+0

Um XOR zu erklären, etwas wie" Möchten Sie Eis XOR Kuchen zum Nachtisch? " könnte illustrativ sein. :) Typischer Fall, in dem die natürliche Sprache "oder" tatsächlich "entweder, aber nicht beide" bedeutet. – Jonik

4

Es ist nützlich, zu erkennen, dass es ein allgemeines System für das Zählen ist zugrunde liegend. Binär ist Basis-2. Vertraute Dezimalzahl ist Basis-10. Linux-Berechtigung oktal ist Basis 8.

Der Wert einer Zahl wird durch Addition der einzelnen Werte der einzelnen Ziffern erhalten. Für jede Ziffer wird der Wert aus einer einfachen Formel abgeleitet.

(digit) * (Basis)^(Anzahl der Stellen nach links des Dezimalpunktes)

123 = 123 = (1 * 10^2) + (2 * 10^1) + (3 * 10^0) = 100 + 20 + 3

ich erfuhr, dass in CS211 (nicht prahlen, nur die Erinnerung)