This sample code from Mozilla's JS reference использует операторы >> и >>> с аргументом RHS, равным 0. Я предполагаю, что это альтернатива Math.floor(), которая имеет преимущество в производительности, поскольку использует встроенный оператор вместо того, чтобы искать функцию. Но какая разница делает >> vs >>> make с нулевым сдвигом?Назначение >> 0 и >>> 0
ответ
От MDN Article:
>>
является Sign-propagating right shift:
сдвигает в двоичном представлении б (< 32) битов вправо, отбрасывая биты, сдвинутые.
>>>
является Zero-fill right shift:
сдвигает в двоичном представлении б (< 32) битов вправо, отбрасывая биты, сдвинутые, и смещение в нулей слева.
Таким образом, разница в том, что сдвиг в нулях слева.
От this stackoverflow answer говорить о нулевом сдвиге:
Так делать операцию побитового, без фактического эффекта, как вправо-смещение 0 бит >> 0, это быстрый способ округлить число и убедитесь, что он находится в 32-битном диапазоне int. Кроме того, оператор triple >>> после выполнения своей неподписанной операции преобразует результаты своего вычисления в Number как целое без знака, а не в числовое целое число, которое они делают, поэтому его можно использовать для преобразования негативов в 32- версия с двумя дополнениями как большой номер. Использование >>> 0 гарантирует, что у вас есть целое число от 0 до 0xFFFFFFFF.
Другой будет также смещаться в нулях слева на половину его входов – Paulpro
Это не отвечает на вопрос: какая разница с нулевым сдвигом? –
Он преобразует их в числа, которые могут быть выражены как 32-бит без знака INTS. Так что да, это будет сделать это (число TypeOf) как этажном междунар, он будет также сделать его 32-битную беззнаковое, что программирование JS любит :)
Основное различие подписанную против знака.
- 1. только прием "<0><0><0><0><0><0><0>" на USART сигнала
- 2. Что делает х >>> 0?
- 3. вопрос о доступе к $ x-> output-> 0-> действия, -> 0-> не работает
- 4. java.lang.ArrayIndexOutOfBoundsException: 0> = 0
- 5. Как упростить A + 0> 0 в A> 0?
- 6. Почему `(a--> 0)` и `((a--)> 0)` одинаковы?
- 7. Почему "[['>'> '0']]" return false while "['>' \> '0']" возвращает true?
- 8. Что означает «somevar >> 0»?
- 9. Почему нет >>> 100 произвести 0 в JavaScript?
- 10. В Javascript, каков эффект «>>> 0» на переменную?
- 11. Что это за линия? arr.length >>> 0
- 12. java.lang.ArrayIndexOutOfBoundsException Ошибка: 0> = 0
- 13. Почему `()> ''> []> {}> 0> None` в Python 2.7?
- 14. Можно использовать <0></0> в xml?
- 15. Преобразование строки "> 0" в python> 0
- 16. java.lang.ArrayIndexOutOfBoundsException: 2> = 0
- 17. Почему -1 >> 1 - -1? И 1 >> 1 - 0!
- 18. Разница между >>> и >> операторами
- 19. jQuery и .length> 0
- 20. string.length> 0 и string.length = 0
- 21. Разница между >> и >>> в Scala
- 22. scandir возвращает [0] =>. и [1] => .. в массиве
- 23. Преобразование True-> 1 и False-> 0 в Javascript?
- 24. ДИ result_array возвращения: Array ([0] => Array ([ID] => 2) [1] => Array ([ID] => 1))
- 25. Назначение строки чтения переменной без >>
- 26. WHERE (ISNULL (ColumnName, 0)> 0) против WHERE (ColumnName IS NOT NULL) И (ColumnName> 0)
- 27. Файлы из GitHub содержат HEAD >>>>>>>>?
- 28. java.lang.ArrayIndexOutOfBoundsException: 0> = 0 пытается заполнить JTable
- 29. array.length vs. array.length> 0
- 30. Опустить "> 0" в условном?
Они отлично подходят для кода-гольфа :) –
Разница заключается в том, как они обрабатывают отрицательные числа. В polyfill длина массива никогда не может быть меньше '0' (пустой массив), поэтому использование' >>> 'в порядке, но кто-то может передать отрицательное число для' target', поэтому сохранение знака имеет решающее значение, следовательно, использование '>>'. Например, '-3 >> 0' по-прежнему' -3', но '-3 >>> 0' возвращает' 4294967293' из-за того, как нули сдвинуты слева, так что потенциально может создать неожиданный результат для переменной «target». – adeneo