簡體   English   中英

JavaScript中的32位有符號整數數學

[英]32-bit signed integer math in JavaScript

我正在將一些傳統的Pascal轉換為JavaScript。 我需要多個兩個32位有符號整數。

在下面的示例循環中,一些乘法將導致溢出並將給出負數。 這是故意的。 我需要在與遺留系統匹配的末尾重現相同的最終數字x。

如何在JavaScript中實現此目的以獲得相同的結果?

以下是一些示例代碼:

var x = new Number(some value);  // I need this to be a 32-bit signed integer
var y = new Number(some value); // I need this to be a 32-bit signed integer

for (var i=0; i<100; i++) {   
    x = x * y; 
} 
return x;

Javascript的按位運算符實際上將值轉換為常規整數。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators這個事實被像asm.js這樣的東西用來強制類型,你也可以自己做。 訣竅是在數字的末尾加上| 0以強制它為32位

function test() {
    var x = 255|0; // |0 does the type coercion
    var y = 255|0; // not strictly necessary at this var decl but used for explicitness

    for (var i=0; i<5; i++) {   
         x = (y * x)|0; // parens needed because |'s precedence
   } 

   return x;
}

我用幾個數字運行它並得到與Firefox中的C相同的結果..沒有機會在IE中測試,但我很確定這種行為是在ECMAscript規范中,所以它應該工作。

JavaScript中的數學運算總是以雙精度浮點形式完成。 你必須編寫自己的乘法例程(或在某處找到一個)來執行整數數學運算,這將是緩慢或困難的(或兩者都是:)。

暫無
暫無

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

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