var rgba = 0xFFFFFFFF;
console.log((rgba&0xFF000000)>>24);
上面的代码段显示-1而不是255,这没有任何意义。我知道JS数字是float64,因此你不能指望精确的二进制操作高于某一点,但是这一点是如此之低,你不能在一个数字中代表一个RGBA通道?
答案 0 :(得分:2)
这实际上不是精确问题。
在javascript中,按位运算符将其参数转换为32位有符号值。在32位有符号格式中& ff000000是负数,所以当你移动它时,左边的位是1而不是0(这是为了确保移位后twos complement negative number仍为负值)。在位移之后,您仍然可以通过按位和使用0xff 来获得所需的行为,如果你拉出不同的颜色组件可能是最好的事情。
var rgba = 0xFFFFFFFF;
console.log((rgba>>24)&0xff);
var red = (rgba>>24) & 0xff;
var green = (rgba>>16) & 0xff;
var blue = (rgba>>8) & 0xff;
var alpha = rgba & 0xff;
正如Marvin Smit上面提到的,>>>是一个无符号的右移,总是拉0,所以在这种特殊情况下你也可以使用它。 Wikipedia describes them为'算术'和'逻辑'右移。