gpt4 book ai didi

javascript - 为什么 JavaScript 会出现按位运算的奇怪行为?

转载 作者:行者123 更新时间:2023-11-29 14:54:28 24 4
gpt4 key购买 nike

var rgba = 0xFFFFFFFF;
console.log((rgba&0xFF000000)>>24);

上面的代码片段显示 -1 而不是 255,这是没有意义的。我知道 JS 数字是 float64,因此您不能指望在特定点以上进行精确的二进制运算,但该点是否太低以至于您无法用单个数字表示 RGBA channel ?

最佳答案

这实际上不是精度问题。

在 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作为“算术”和“逻辑”右移。

关于javascript - 为什么 JavaScript 会出现按位运算的奇怪行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20174939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com