2013-04-02 4 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

Вы принимаете побитовое ИЛИ двоичного представления этих чисел. Цифры от 0 до 10 в двоичный вид:

0000 
0001 
0010 
0011 
0100 
0101 
0110 
0111 
1000 
1001 
1010 

Если вы должны были выполнить OR каждой цифре все эти цифры, вы бы в конечном итоге с 1111 - что в десятичной системе 15.

+0

Я думаю, что более простой способ вычислить число - это использовать старый метод 8421, и когда вы видите '1', вы добавляете значения, например' 1001 = 9', если вам нужно 16, это будет '10000', – MethodMan

1

| - это побитовый оператор OR в 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 
Смежные вопросы