![](/img/trans.png)
[英]How do I use 32-bit signed integer's complement to represent an integer in javascript
[英]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.