@kopytse

Какие математические операции выполняет этот код?

Имеется код на JavaScript:

function o(e) {
                    var t = arguments.length
                      , n = e & 65535
                      , r = e >> 16;
                    for (var i = 1; i < t; i++) {
                        var s = arguments[i];
                        n += s & 65535,
                        r += (s >> 16) + (n >> 16),
                        n &= 65535
                    }
                    return r << 16 | n & 65535
                }


Уже второй час изучаю его и не могу понять, какие конкретно операции он выполняет - мне непонятны операторы |, >> и &. Если в него передать, к примеру, число 100000000000000000000, он вернёт 1661992960.
Как работает данный алгоритм?
  • Вопрос задан
  • 301 просмотр
Пригласить эксперта
Ответы на вопрос 2
@CHolfield
это логические и битовые операции.
| - логическое сложение
& - логическое умножение
<< и >> - сдвиг влево или вправо на количество бит, аналогично умножению или делению на 2 в указанной степени

конкретно как работает &
y = x & 65535

для x=12345
переводим в двоичный вид
11000000111001
переводим 65535 туда же
1111111111111111
выполняем логическое побитовое сложение (правила сам поищи)
результат = 10011000000111000
переводим обратно в десятичный вид
77880
както так)
Ответ написан
@StockholmSyndrome
какие конкретно операции он выполняет

побитовые
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы