Здравствуйте,не понимаю,почему alert( Math.pow(2, 31) ^ 0 );
дает результат -2147483648.
Почему происходит переполнение?
p.s. 1000...^0000...=1000...
Потому что в js побитовые операторы работают с 32битным числами со знаком.
Число 2^31 выходит за ограничения 32битной записи со знаком.
2 ^ 31 = 10000000000000000000000000000000 = -2147483648
| - это знак
2^31 - 1 = 01111111111111111111111111111111 = 2147483647
console.log( (2 ** 31).toString(2).length); // 32 порядка. первый бит - знак.
console.log( (2 ** 31 - 1) ^ 0); // 31 единица, всё еще нормально
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости