为什么4294967295 >> 24 == -1在Javascript中?

Dav*_*len 4 javascript

我正在使用以下方法计算Javascript中的亮度:

luminosity = (5036060 * backgroundColor.red + 9886846 * backgroundColor.green + 1920103 * backgroundColor.blue) >> 24;
Run Code Online (Sandbox Code Playgroud)

对于颜色为白色的情况,即所有3个RGB值都是255,我得到-1的结果.我明确地测试了并且在Javascript中值"4294967295 >> 24"是-1.

为什么?

Ber*_*rgi 9

JavaScript确实使用32位整数进行按位运算.无符号值与+4294967295-1符号32位整数的表示形式相同- 一系列32位1.如果你使用带符号的右移位运算符进行移位,它将被符号位填充,并且-1 >> x总是最终得到-1.

请使用无符号右移运算符:

4294967295 >>> 24 // 255
Run Code Online (Sandbox Code Playgroud)