Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Побитовый оператор >>> (https://javascript.ru/forum/misc/15841-pobitovyjj-operator.html)

yolka 15.03.2011 21:17

Побитовый оператор >>>
 
Очень часто встречаю применение побитового оператора >>> в подобном примере:

var array = [1,2,3], 
length = array.length >>> 0;

for (var i = 0; i < length ; i++) {
/* . . . */
}

зачем он тут нужен?

Kolyaj 15.03.2011 23:30

Ну в общем-то он тут не нужен.

Amphiluke 15.03.2011 23:30

Возможно, это делается для того, чтобы количество итераций цикла не превысило максимального 32-битного значения 4294967295.

Если по каким-то причинам массив заимеет больше 4294967295 элементов (O_o), то «благодаря» сдвигу >>> цикл не станет пробегать все эти элементы массива, а «урежет» старшие разряды (дальше 32-го), и тогда, например, 4294967296 превратится в 0, 4294967297 — в 1, а 449812501682 — в 3135902898 (легко проверить на калькуляторе отбрасыванием разрядов выше 32-го).

Возможно, есть и другой смысл…

yolka 16.03.2011 17:58

Цитата:

Сообщение от Kolyaj
Ну в общем-то он тут не нужен.

по этой причине?:
Цитата:

Сообщение от Amphiluke
Если по каким-то причинам массив заимеет больше 4294967295

Цитата:

Сообщение от Amphiluke
Возможно, есть и другой смысл…

получается, что такая перестраховка в большинстве случаев бессмыслена, и не стоит выполнять лишнюю операцию и вообще, скажется ли на производительности цикла такая дополнительная опреация?

Matre 16.03.2011 18:01

yolka

Нет. Операция выполняется всего один раз. А циклу без разницы, как вычислялась переменная length.


Часовой пояс GMT +3, время: 07:57.