2013-04-02 37 views
3

所以我剛纔瞎搞,並寫下了這一點:管道操作員,它是如何工作的?

 int i = 0|1|2|3|4|5|6|7|8|9|10; 

     Console.WriteLine(i.ToString()); 
     Console.Read(); 

此輸出15.爲什麼它輸出15?管道運營商做了什麼?

你能舉個例子說明這可能實際上被用到了嗎?

我明白這是不是一個毫無意義的問題。

回答

15

這是bit-wise OR operator

的或經營基本事實表:

A B A|B 
    0 0 0 
    0 1 1 
    1 0 1 
    1 1 1 

因此,要分析你的案例0|1|2|3|4|5|6|7|8|9|10,二進制,那就是:

0 = 0b00000 
1 = 0b00001 
2 = 0b00010 
3 = 0b00011 
4 = 0b00100 
5 = 0b00101 
6 = 0b00110 
7 = 0b00111 
8 = 0b01000 
9 = 0b01001 
10 = 0b01010 
------------ 
15 = 0b01111 

進一步閱讀

+4

突然,它的解釋。 – plast1K

+1

@ Plast1k你可以很容易地解釋這個LOL – MethodMan

+0

我不相信我可以!我以前見過真相表,但並沒有真正能夠以這種方式應用它們。這非常有幫助。 – plast1K

0

你正在服用的逐位這些數字的二進制表示的OR。在二進制看起來像數字0至10:

0000 
0001 
0010 
0011 
0100 
0101 
0110 
0111 
1000 
1001 
1010 

如果你執行所有這些數字的每個數字的或者,你最終會與1111 - 這是15進制數。

+0

我覺得一個更簡單的方法來找出數字是使用舊的'8421'方法,並且在哪裏你看到一個'1',如果你想要的話,你可以添加例如'1001 = 9'16它將是'10000' – MethodMan

1

|是C#(和許多其他語言)中的按位或運算符。兩位之間的或運算如下所示:

0 | 0 = 0 
1 | 0 = 1 
0 | 1 = 1 
1 | 1 = 1 

so in decimal 1 | 2變成01 | 10二進制,導致11(3十進制),像這樣:

01 
10 
-- 
11 

位或是一個累積的操作,以便:

0 = 00000 
1 = 00001 
2 = 00010 
3 = 00011 
4 = 00100 
5 = 00101 
6 = 00110 
7 = 00111 
8 = 01000 
9 = 01001 
10 = 01010 
------------ 
15 = 01111