2012-02-22 1 views
1

я просто экспериментировал и попытался положить это в консоли:Почему это «4 | 2 | 4 | 1 | 10» возвращает 15 в JavaScript?

4 | 2 | 4 | 1 | 10 

возвращается в консоли ..

4 | 2 | 4 | 3 | 1 

возвращается в консоли ..

Я попытался что в Chrome и Firefox.

Почему?

Я только начинаю с изучения JavaScript ... возможно, мне не хватает понятия здесь?

+3

Что вы ожидали возвращения, и почему? –

+0

Что вы ожидаете от него? –

+0

Ну, я никогда не работал с побитовыми операторами, как другие люди, упомянутые ниже .. лично, я ожидал «истину», но это JavaScript, поэтому я еще не привык к его концепциям и причудам. –

ответ

6

Оператор | в JavaScript - это bitwise integer OR operator. Таким образом, это делает операцию ИЛИ над битами вы даете его, в результате чего в 15

bitwise OR operation принимает каждый бит в значении и устанавливает соответствующий бит в результате, если либо входных битов в этом положении установлен. Так

4 is 0100 in binary 
2 is 0010 
4 is 0100 
1 is 0001 
10 is 1010 
     ---- 
     1111 = 15 decimal

Update: В комментарии на ваш вопрос, вы сказали, что вы ожидали true, а не 15. Если да, то вы хотите, а не оператор побитового в логическое ИЛИ оператора, ||, хотя || также может удивить вас с тем, что она возвращает (4 || 2 || 4 || 1 || 10 = 4, не true), так как в JavaScript логическое ИЛИ (||) является curiously powerful, больше, чем в многие другие языки.

+0

Да ... в двоичной форме это имеет смысл: 0100 | 0010 | 0100 | 0001 | 1010 = 1111 = 15 – pilotcam

+0

просто интересно .. какой-нибудь реальный мир использует для этого? –

+1

@JanCarloViray: Возможно, миллионы из них. Побитовые операции очень популярны в вычислениях. Вероятно, не * как * популярный в типичной среде, где используется JavaScript (веб-браузеры), но я уверен, что есть некоторые. И конечно, когда JavaScript используется в других средах, таких как NodeJS, где вы выполняете операции, такие как открытые файлы, и используйте '|' для объединения различных флагов режима файла. –

3

Вы используете OR operation

Если вы хотите, истина/ложь или вы хотите ||.

+0

Обратите внимание, что использование логического оператора '||' не приведет к «истинному» или «ложному» с этими целыми операндами. Оба случая просто приведут к '4' – Phil

+0

Я знаю, но если он хочет true/false. –

+0

@DhaivatPandya: Опять же, точка Фила состоит в том, что '||' не даст вам «истина» или «ложь». –

2

Оператор |побитовый или оператор.

В | оператор выстраивается двоичных разрядов каждого операнда и возвращает 1 для этого места, если есть в этом месте один или оба из операндов 1.

Например, давайте посмотрим на то, что 3 | 10 делает:

3 в двоичном 11. 10 является 1010 в двоичном формате.

линия их, и вы получите

3  - 0011 
10  - 1010 
Result - 1011 

Результат 1011 в десятичной системе 11, так что результат этого примера 11.

Вот один из примеров, в вашем вопросе 4 | 2 | 4 | 1 | 10

4 - 0100 
2 - 0010 
4 - 0100 
1 - 0001 
10 - 1010 
| ====== 
    1111 

И 1111 является двоичным для 15, который был результат, который вы получили.

Побитовый или оператор, как и другие bit manipulation operators, обычно используются для низкоуровневых вычислений. Например, вы можете реализовать арифметику как умножение, добавление и деление полностью с побитовыми операторами.

+0

просто интересно, что вы используете в этом мире? –

Смежные вопросы