Javascript位移到32位

Javascript位移到32位,javascript,bit-manipulation,Javascript,Bit Manipulation,我有一个整数数组 var ints = [R,B,G,A] 我想用移位得到一个32位的表示 var thirtyTwo = AGBR 那么比如说, [255.0, 0.0, 0.0, 255.0] => 0xFF0000FF => 4278190335 我试图通过循环和位移位来实现这一点: function cArrayToABGR(va) { var res = 0; for (var i = 0; i < va.length; ++i) {

我有一个整数数组

var ints = [R,B,G,A]
我想用移位得到一个32位的表示

var thirtyTwo = AGBR
那么比如说,

[255.0, 0.0, 0.0, 255.0] => 0xFF0000FF => 4278190335
我试图通过循环和位移位来实现这一点:

function cArrayToABGR(va) {
    var res = 0;
    for (var i = 0; i < va.length; ++i) {
        var color = va[i];
        color <<= (8 * i);
        res += color;
    }
    return res;
}
函数cArrayToABGR(va){
var-res=0;
对于(变量i=0;i在JS中,所有按位运算符都是32位有符号的,而结果是32位无符号的

作为解决方法,您可以将其计算为:

var res = ints.reduce(function(result, current) {
    return result * 256 + current;
}, 0); // 4278190335
在ES2015中,哪一个更好:

var res = ints.reduce((result, current) => result * 256 + current, 0);
PS:不确定是否存在类似“无符号浮点”的东西(至少对于实现IEEE754的语言而言)

>0来获取无符号整数:

(255 << 24) >>> 0 // 4278190080
(255>>0//4278190080
所以:

var ints = [255.0, 0.0, 0.0, 255.0];

function cArrayToABGR(va) {
    var res = 0;
    for (var i = 0; i < va.length; ++i) {
        var color = va[i];
        color <<= (8 * i);
        res += color;
    }
    return res >>> 0;
}

console.log(cArrayToABGR(ints));
// 4278190335
var ints=[255.0,0.0,0.0,255.0];
函数cArrayToABGR(va){
var-res=0;
对于(变量i=0;i0;
}
控制台日志(cArrayToABGR(ints));
// 4278190335

“我以为Javascript中的所有逐位操作都是在无符号32位浮点上的”-2的补码中的有符号32位整数是你的PS。甚至
返回res>>>0;
啊,是的,更好。谢谢。
var ints = [255.0, 0.0, 0.0, 255.0];

function cArrayToABGR(va) {
    var res = 0;
    for (var i = 0; i < va.length; ++i) {
        var color = va[i];
        color <<= (8 * i);
        res += color;
    }
    return res >>> 0;
}

console.log(cArrayToABGR(ints));
// 4278190335