Почему происходит переполнение при 2^31 xor 0

314
20 ноября 2017, 21:29

Здравствуйте,не понимаю,почему alert( Math.pow(2, 31) ^ 0 ); дает результат -2147483648.

Почему происходит переполнение?

p.s. 1000...^0000...=1000...

Answer 1

Потому что в 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 единица, всё еще нормально

READ ALSO
Javascript код в представлении Yii2

Javascript код в представлении Yii2

Правильно ли размещать javascript-код в вьюшках где лежит PHP код или его надо размещать где то в другом месте?

278
Как вывести сумму нечетных чисел циклом от 11 до 30 do-while на PHP

Как вывести сумму нечетных чисел циклом от 11 до 30 do-while на PHP

Как вывести сумму нечетных чисел циклом от 11 до 30 do-while на PHP

334
Как поправить кодировку?

Как поправить кодировку?

Делаю проверку на палиндром, но с русскими символами, что то не такПочему кодировка кривая? Кто то подскажет ?

248
Система личных сообщений

Система личных сообщений

Учусь делать самую простую систему сообщений, между двумя пользователями, где на сообщение можно ответить только 1 раз и это сообщение и ответ,...

215