簡體   English   中英

JavaScript中的整數除法和位移

[英]Integer division and bit shift in JavaScript

是JavaScript代碼嗎?

var n = 8; // or some arbitrary integer literal
n >> 1;

總是表示“沒有剩余的2整數分割”? 如果整數文字大於一個字節,我關心的是endianess。

我的問題的背景如下:

我有一個0到2 ^ 32-1范圍內的整數變量,如果我有一個不同於JS的類型化編程語言,它將適合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並將divdiding 256來填充數組。但是真正的divions“/”會將變量轉換為浮點變量。 所以我使用“>> 8”但這實際上假設了大字節。

您提供的代碼絕對與endianess無關。

但是,如果你要重新解釋說uint32數組中的字節數組,那么結果會有所不同,具體取決於瀏覽器運行的機器的字節順序。

首先,修復代碼中的錯誤:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM