Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 此“long”函数的含义(两个&x27;的补码和位移位)_Javascript_Numbers_Byte_Bit Shift - Fatal编程技术网

Javascript 此“long”函数的含义(两个&x27;的补码和位移位)

Javascript 此“long”函数的含义(两个&x27;的补码和位移位),javascript,numbers,byte,bit-shift,Javascript,Numbers,Byte,Bit Shift,我遇到了这个函数: const LIMIT32=2147483648;//32位数字切换符号的极限==2^31 函数长(v){ //二元补码 如果(v>=LIMIT32){ v=-(2*32-v); } 返回[(v>>24)&0xFF,(v>>16)&0xFF,(v>>8)&0xFF,v&0xFF]; } //例如。 [-3, -2, -1, 0, 1, -2147483649,-2147483648,-2147483647, 214748364721474836482147483649].f

我遇到了这个函数:

const LIMIT32=2147483648;//32位数字切换符号的极限==2^31
函数长(v){
//二元补码
如果(v>=LIMIT32){
v=-(2*32-v);
}
返回[(v>>24)&0xFF,(v>>16)&0xFF,(v>>8)&0xFF,v&0xFF];
}
//例如。
[-3, -2, -1, 0, 1,
-2147483649,-2147483648,-2147483647,
214748364721474836482147483649].forEach(x=>
log(`${x}:${long(x)}`)
);
我通常想知道这个函数在做什么(为什么返回数组,数组元素是什么)

它返回一个由4个字节组成的数组,这些字节构成一个int32值。为什么有人写代码来做这件事?我不知道

然后我想知道为什么它需要v,做看起来像符号翻转和乘法的事情

因为int32就是这样工作的:
0x7FFFFFFF+1===-0x8000000

虽然在这段代码中它是不必要的,但是位操作会处理所有的事情

最后,介绍每个项的位移位和&操作的含义,为什么是8的倍数,以及为什么选择0xFF


获取int32的不同字节,每个字节长8位。

它返回一个数组,因为
return
语句显式构造了一个数组。它为什么这样做取决于函数在任何上下文中的用途。我认为函数希望以8位字节返回所有内容,这就是该部分。