Что означает "|" (одну трубу) делать в JavaScript?

console.log(0.5 | 0); // 0
console.log(-1 | 0);  // -1
console.log(1 | 0);   // 1

Почему 0.5 | 0 вернуть ноль, но любое целое число (включая отрицательное) возвращает входное целое число? Что делает одна труба ("|")?

5 ответов

Решение

Это побитовое или.
Поскольку побитовые операции имеют смысл только для целых чисел, 0.5 усечено.

0 | x является x, для любого x,

Сравнение битов настолько просто, что почти непостижимо;) Посмотри на этот "клочок"

   8 4 2 1
   -------
   0 1 1 0 = 6  (4 + 2)
   1 0 1 0 = 10 (8 + 2)
   =======
   1 1 1 0 = 14 (8 + 4 + 2)

Побитовое ORing 6 и 10 даст вам 14:

   alert(6 | 10); // should show 14

Страшно запутанно!

Одиночная труба - это немного ИЛИ.

Выполняет операцию ИЛИ на каждой паре битов. ИЛИ b выдает 1, если либо a, либо b равно 1.

JavaScript обрезает любые нецелые числа в побитовых операциях, поэтому вычисляется как 0|0, который равен 0.

Этот пример поможет вам.

 
    var testPipe = function(input) { 
       console.log('input => ' + input);
       console.log('single pipe | => ' + (input | 'fallback'));
       console.log('double pipe || => ' + (input || 'fallback'));
       console.log('-------------------------');
    };

    testPipe();
    testPipe('something'); 
    testPipe(50);
    testPipe(0);
    testPipe(-1);
    testPipe(true);
    testPipe(false);

Это Bitwsie OR (|).

Операнды преобразуются в 32-битные целые числа и выражаются серией битов (нулей и единиц). Числа с более чем 32 битами отбрасывают старшие разряды.

Итак, в нашем случае десятичное число преобразуется в целое число от 0,5 до 0.

      = 0.5 | 0
= 0   | 0
= 0
Другие вопросы по тегам