Why bitwise shift with 0 in JavaScript yields weird results in some cases
问题 Just played around with unusual bitwise operations in JavaScript and I got some weird results in some cases: Usual cases 1 << 0 // returns 1, makes sense 100 << 0 // returns 100, makes sense 100 >> 0 // returns 100, definitely makes sense But these, when shift by 0 bits, all yield zero 9E99 << 0 // returns 0 ..... Why all bits are cleared? 9E99 >> 0 // returns 0 also ..... All bits cleared? Infinity >> 0 // returns 0 Infinity << 0 // returns 0 -Infinity << 0 // returns 0 .... Can't explain