@Harmm

Почему в JS 3232286728 & (-256) = -1062680576?

Столкнулся с проблемой в javascrip, не могу получить правильный результат с выражения: 3232286728 & (-256).
Получаю -1062680576, хотя должно быть 3232286720.
Помогите решить проблему.

console.log(3232286728 & (-256)); // -1062680576
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
Для поразрядных операций JS приводит числа к Int32 (знаковому), и, например, 3232286720 в этот диапазон не влазит, оно считается отрицательным из-за единичного старшего бита.

Чтобы посмотреть, как оно работает, открой консоль браузера, и создай 2 массива:
var a = new Uint32Array(1);
var b = new Int32Array(a.buffer);

a[0] = 3232286728;

console.log(b[0]);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Harmm Автор вопроса
спасибо за помощь, вот так мне удалось решить проблему

console.log(Number(BigInt(3232286728) & BigInt(-256))); // 3232286720

если есть другое решение, пишите
Ответ написан
Комментировать
Lynn
@Lynn
nginx, js, css
Можно использовать беззнаковый оператор сдвига вправо.
(3232286728 & -256) >>> 0
// 3232286720
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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