【发布时间】:2013-08-16 20:01:06
【问题描述】:
是否有 JavaScript 代码
var n = 8; // or some arbitrary integer literal
n >> 1;
总是表示“整数除以 2 没有余数”?如果整数文字大于一个字节,我担心的是字节顺序。
我的问题背景如下:
如果我有一种不同于 JS 的类型化编程语言,我有一个 0 到 2^32-1 范围内的整数变量,它将适合 uint32。我需要将其转换为具有四个元素的 Uint4Array,以小端顺序排列。
我目前的 JavaScript 方法是:
function uInt32ToLEByteArray( n ) {
var byteArray = new Uint8Array(4);
for( var i = 0; i < 4; i++ ) {
byteArray[i] = n & 255;
n >> 8;
}
return byteArray;
}
这段代码在我的浏览器中有效,但我想知道这是否适用于任何地方。主要思想是通过取 LSB 并除以 256 来填充数组。但真正的除法“/”会将变量转换为浮点变量。所以我使用“>>8”,但这实际上假设了大字节序。
【问题讨论】:
-
"这段代码在我的浏览器中有效,但我想知道这是否适用于任何地方。"你是说其他语言?或者您是否要求确认
x >> y将x转换为(签名的)Int32。它还保留最左边的位(它们不会变成0,如果你使用>>>,会发生这种情况)。 -
对于“无处不在”,我想说“在每台机器上的每个浏览器中”。我的计算机都与 Intel 兼容,因此我无法确定在具有大字节序的设备上会发生什么。
标签: javascript endianness bit-shift integer-division