JavaScript中的32位有符号整数数学

JavaScript中的32位有符号整数数学,javascript,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 nee

我正在将一些遗留的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;
var x=新数字(某些值);//我需要它是一个32位有符号整数
变量y=新数字(某些值);//我需要它是一个32位有符号整数

对于(var i=0;iJavaScript中的数学运算始终作为双精度浮点完成。您必须编写自己的乘法例程(或在某处找到一个)来执行整数数学运算,这可能很慢,也可能很难(或两者兼而有之:).

Javascript的逐位运算符实际上将值转换为一个常规整数。类似于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;
}
功能测试(){
var x=255 | 0;//0执行类型强制
var y=255 | 0;//在这个var decl中不是严格必需的,但用于明确性

对于(var i=0;顺便说一句,这是该语言最薄弱的方面之一。你所说的是正确的,但上面接受的答案解决了我当前的问题。@Vic,它对某些值有效,但乘法运算本身是以浮点硬件作为双精度运算执行的,因此值接近nu的极限meric容量可能会变得奇怪。@Vic事实上,由于尾数位数比32位多得多,它可能会正常工作。到目前为止,我的测试数据显示了正确的结果。保持我的数字交叉。我认为不需要参数。
|
的优先级高于“*”。但我的经验法则是,如果你必须查找或思考更多的尾数,就可以了第二个关于优先规则的问题,只要写下要说明的参数,对下一个读者来说是非常清楚的。
操作符的优先级非常低,
*
的优先级非常高,并且最有可能在操作中首先执行。看这个:嗯,我应该查一下它……你确实是对的。但是,我还是更喜欢这样不管怎样,还是写吧。