2013-05-08 12 views
7

Widziałem znak potoku używany w wywołaniach metod w programach Java.Co robi znak potoku w wywołaniu metody Java?

Na przykład:

public class Testing1 { 

    public int print(int i1, int i2){ 
     return i1 + i2; 
    } 
    public static void main(String[] args){ 
     Testing1 t1 = new Testing1(); 
     int t3 = t1.print(4, 3 | 2); 
     System.out.println(t3); 
    } 
} 

Kiedy uruchamiam to, po prostu dostać 7.

Czy ktoś może wyjaśnić, co robi rura w wywołaniu metody i jak z niej korzystać prawidłowo?

+0

Sprawdź ten link http://stackoverflow.com/questions/7226538/how-to-use-pipe-symbol-in-java – Srinivas

Odpowiedz

13

Rura w 3 | 2 to operator bitwise inclusive OR, który zwraca 3 w twoim przypadku (11 | 10 == 11 w systemie binarnym).

+5

Nie wykonuje bitowego LUB, zachowując wszystkie bity ustawione na 1 w jeden z operandów. Na przykład "2 | 1' => '10 | 01' => '11' =>' 3' - inny: '6 | 5' => '110 | 101' => '111' =>' 7' itd ... – assylias

+1

Czy możesz wytłumaczyć w jedną stronę, że byłoby to przydatne? – CodyBugstein

+1

Na przykład, aby przekazać kilka opcji: 'int opcja1 = 1, opcja2 = 2, opcja3 = 4, opcja4 = 8' (tak w binarnym: 1, 10, 100, 1000). Następnie możesz zrobić coś takiego: 'method (opcja1 | opcja2 | opcja3)', aby powiedzieć, że chcesz wszystkie te opcje. W metodzie można wykonać 'argument & 1', aby sprawdzić, czy wybrano opcję1.Teraz nie jest to coś, z czego korzystasz codziennie, ale może być przydatne w niektórych sytuacjach. – assylias

7

To trochę OR.

bitowego reprezentację liczb jest tak:

 
|2^2|2^1|2^0| 
| 4 | 2 | 1 | 
  • reprezentacja bitowe 3 jest:
 
|2^2|2^1|2^0| 
| 4 | 2 | 1 | 
| - | X | X | => 3 
  • reprezentacja bitowe 2 są:
 
|2^2|2^1|2^0| 
| 4 | 2 | 1 | 
| - | X | - | => 2 

Bitowe OR zwróci 3, ponieważ przy użyciu OR przynajmniej jeden bit musi być "zajęty". Ponieważ pierwszy i drugi bit jest zajęty (3 | 2) powróci 3.

wreszcie dodanie 4 + 3 = 7.

1

Operator | wykonuje bitowe LUB o wielkości:

3 | 2 ---> 0011 (3 in binary) 
      OR 0010 (2 in binary) 
      --------- 
       0011 (3 in binary) 

Oto wzór:

0 OR 0: 0 
0 OR 1: 1 
1 OR 0: 1 
1 OR 1: 1 

Korzystanie |:

if(someCondition | anotherCondition) 
{ 
    /* this will execute as long as at least one 
     condition is true */ 
} 

pamiętać, że jest podobny do short-circuit OR (||) powszechnie stosowane w if oświadczenia:

if(someCondition || anotherCondition) 
{ 
    /* this will also execute as long as at least one 
     condition is true */ 
} 

(oprócz tego || nie wymusza konieczność dalszego sprawdzenia innych warunków kiedyś prawdziwym wyrazem było znaleźć.)