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