javascript - JavaScript 中的整数除法和位移位

标签 javascript endianness bit-shift integer-division

是否有 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 来填充数组。但是真正的 divions“/”会将变量转换为浮点变量。所以我使用“>>8”,但这实际上假定了大字节序。

最佳答案

您提供的代码与字节序绝对无关。

但是,如果您要重新解释 uint32 数组中的字节数组,那么结果会有所不同,具体取决于运行浏览器的机器的字节顺序。

首先修复代码中的bug:

function uInt32ToLEByteArray(n) {
    var byteArray = new Uint8Array(4);
    for (var i = 0; i < 4; i++) {
        byteArray[i] = n & 255;
        n >>>= 8; //simply doing n >> 8 has no effect actually
    }
    return byteArray;
}

然后

var a = uInt32ToLEByteArray(0xFF)
console.log(a);
//always [255, 0, 0, 0]

var b = new Uint32Array(a.buffer);
console.log(b);
//[255] on little endian machines
//[4278190080] on big endian machines

关于javascript - JavaScript 中的整数除法和位移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18281257/

相关文章:

javascript - 如何将焦点设置在 dynatree 标题中的输入字段上

javascript - 使用 $.getscript ("")而不发送引用 header ?

java - 将 2 个整数值组成一个 long

c++ - 编译时排除部分函数模板

assembly - 可变位移位

javascript - NextJS React - WebpackError : window is not defined 错误

javascript - 使用 bool 值对对象进行排序

c++ - STM32 从 PC 通过 USB float ,endianess 挣扎

c++ - 指针转换字节顺序

javascript - 为什么我不能使用 << 2 将 0xff0000 转换为 0xff000000?