为什么4294967295>&燃气轮机;Javascript中的24==-1?
我使用Javascript计算亮度时使用的是:为什么4294967295>&燃气轮机;Javascript中的24==-1?,javascript,Javascript,我使用Javascript计算亮度时使用的是: luminosity = (5036060 * backgroundColor.red + 9886846 * backgroundColor.green + 1920103 * backgroundColor.blue) >> 24; 对于颜色为白色的情况,即所有3个RGB值均为255,我得到的结果为-1。我在Javascript中明确测试了值“4294967295>>24”为-1 为什么?JavaScript确实使用32位整数进行
luminosity = (5036060 * backgroundColor.red + 9886846 * backgroundColor.green + 1920103 * backgroundColor.blue) >> 24;
对于颜色为白色的情况,即所有3个RGB值均为255,我得到的结果为-1。我在Javascript中明确测试了值“4294967295>>24”为-1
为什么?JavaScript确实使用32位整数进行逐位运算。无符号值
+4294967295
对于有符号32位整数(一系列32位1
)的表示方式与-1
相同。如果使用运算符将其移位,它将被符号位填满,并且-1>>x
始终以-1
结束
请改用运算符:
4294967295 >>> 24 // 255
>
的定义如下:
在左侧执行符号填充按位右移操作
按右操作数指定的数量进行运算
生产移位表达式:移位表达式>>
加法表达式
评估结果如下:
ToInt32(4294967295)
是-1
而
-1>>24
是-1
为什么不将亮度计算为浮点值[0,1]?那么我应该进行除法?或者有更有效的方法吗?@DavidThielen:是的,Math.floor(x/(1>)
当你想做整数魔术时。对于,我建议只使用浮点数学。我使用了上面提到的>>>24。谢谢!