Рассматривая следующие примеры, это выглядит так: Math.floor(x)
эквивалентно x | 0
, для x >= 0
. Это действительно так? Если да, то почему? (Или как x | 0
рассчитывается?)Javascript Integer Division, или Math.floor (x) эквивалентно x | 0 при х> = 0?
x = -2.9; console.log(Math.floor(x) + ", " + (x | 0)); // -3, -2
x = -2.3; console.log(Math.floor(x) + ", " + (x | 0)); // -3, -2
x = -2; console.log(Math.floor(x) + ", " + (x | 0)); // -2, -2
x = -0.5; console.log(Math.floor(x) + ", " + (x | 0)); // -1, 0
x = 0; console.log(Math.floor(x) + ", " + (x | 0)); // 0, 0
x = 0.5; console.log(Math.floor(x) + ", " + (x | 0)); // 0, 0
x = 2; console.log(Math.floor(x) + ", " + (x | 0)); // 2, 2
x = 2.3; console.log(Math.floor(x) + ", " + (x | 0)); // 2, 2
x = 2.9; console.log(Math.floor(x) + ", " + (x | 0)); // 2, 2
x = 3.1; console.log(Math.floor(x) + ", " + (x | 0)); // 3, 3
Это может быть полезно для выполнения целочисленного деления в Javascript: (5/3) | 0
, а не Math.floor(5/3)
.
'x> = 0' и' x
Leonid
Фактически, 'x | 0' также совпадает с' ~~ x', '~' является поразрядным оператором NOT, который делает это: '~ x = - (x + 1)' (добавляет 1 и изменяет знак). А так как ~ также является поразрядным оператором, он также преобразует число в целое.Повторяя ~ x, вы возвращаете исходный номер с оригинальным знаком +/-, но как целое число. Другими словами: '~~ x == (x | 0)' – DiegoDD