为什么 JavaScript 对按位运算呈现奇怪的行为
Why JavaScript presents weird behavior for bitwise operations?
var rgba = 0xFFFFFFFF;
console.log((rgba&0xFF000000)>>24);
上面的代码段显示 -1 而不是 255,这毫无意义。我知道 JS 数字是 float64,因此你不能指望在某个点以上进行精确的二进制运算,但那个点太低了,你不能用一个数字表示 RGBA 通道吗?
这实际上不是一个精度问题。
在 javascript 中,按位运算符将其参数转换为 32 位有符号值。 在 32 位有符号形式中 &ff000000 是一个负数,所以当你移动它时,左侧的位是 1 而不是 0(这是为了确保 twos 补码负数在移位后保持负数(。 在位移之后,您仍然可以通过按位和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,所以在这种特定情况下,你也可以使用它。维基百科将它们描述为"算术"和"逻辑"右移。
相关文章:
- 使用JavaScript进行乘法运算
- 我可以在不使用乘法运算符“”的情况下进行乘法运算吗*"在JavaScript中
- 如何动态获取输入值并使用javascript执行算术运算
- 在本地将javascript添加到examplep中以执行数学/公式运算
- 你能用javascript解释对象和数组运算吗
- Javascript在数学运算后返回一个NaN值
- 在Javascript中,如何在递增(i++*2)之后进行乘法运算
- 为什么 JavaScript 对按位运算呈现奇怪的行为
- 如何使用Javascript/JQuery检查字符串的形式是否为10 * 10 * 10 * 10,然后进行数学运算
- Javascript不做算术运算
- JavaScript 中的顺序算术运算
- 如何使用javascript计算sin,cos,tan和math运算
- Javascript 在数学运算之间附加字符串
- Javascript:数学运算方法
- JavaScript 中的精确浮点运算
- JavaScript(或jQuery)在提交之前在表单中进行数学运算
- 我如何在Javascript中对大于2^32的数字进行逐位运算
- 如何在javascript中过滤多个值(OR运算)
- Javascript-在包含数学运算的安全字符串上使用eval的问题
- JavaScript数学运算和实时输入文本字段