console.log(0.5 | 0); // 0
console.log(-1 | 0); // -1
console.log(1 | 0); // 1
Dlaczego 0.5 | 0zwraca zero, ale każda liczba całkowita (w tym ujemna) zwraca wejściową liczbę całkowitą? Co robi pojedyncza kreska („|”)?
console.log(0.5 | 0); // 0
console.log(-1 | 0); // -1
console.log(1 | 0); // 1
Dlaczego 0.5 | 0zwraca zero, ale każda liczba całkowita (w tym ujemna) zwraca wejściową liczbę całkowitą? Co robi pojedyncza kreska („|”)?
Odpowiedzi:
To jest bitowe lub .
Ponieważ operacje bitowe mają sens tylko na liczbach całkowitych, 0.5jest obcięty.
0 | xjest xdla każdego x.
parseInt()
Porównanie bitów jest tak proste, że prawie niezrozumiałe;) Sprawdź to "nybble"
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)
Bitowe ORing 6 i 10 daje 14:
alert(6 | 10); // should show 14
Strasznie zagmatwane!
alert(true | false) //yields 1; alert(true | true) //yields 1; alert(false | true) //yields 1; alert(false | false) //yields 0
Pojedyncza rura jest bitowym OR .
Wykonuje operację OR na każdej parze bitów. a LUB b daje 1, jeśli a lub b wynosi 1.
JavaScript obcina wszystkie liczby nie będące liczbami całkowitymi w operacjach bitowych, więc jest obliczany jako 0|0, czyli 0.
Ten przykład ci pomoże.
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);