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 中的数学运算总是作为双精度浮点数完成的。 你必须编写自己的乘法例程(或在某个地方找到一个)来执行整数数学,这将是缓慢或困难的(或两者兼而有之:)。
相关文章:
- Js char数组将字符串整数视为整数
- 如何在JavaScript中剥离数组元素中的非整数
- 如何删除“;整数“;JavaScript中对象的数组
- 效率:整数数组的一个子集中两个项之间的最大差值
- 在JS中返回数组的大整数运算
- 创建一个javascript数组(N),该数组由连续的较小整数组成,其和为1000
- 包含整数(秒)和 setTimeout() 的数组
- 在参数数组中传递整数数组
- 如何要求用户输入一个介于 1 和 50 之间的整数,然后小程序打印出一行这个星数
- 将整数数组从插件传递到JavaScript
- Javascript-如何快速构建不同正整数数组的二进制表示
- 如何用整数“平滑”数组
- 查找1000个随机整数的数组的平均值javascript
- 如何在jQuery-Javascript中填充一个月数数组
- 如何循环元素&数数
- 将字符串javascript数组转换为整数javascript数组
- 将二进制数数组转换为相应的整数
- 在 Javascript/jQuery 中创建两个数字(包括两个数字)之间的所有整数的数组
- 在jQuery中将类似数组的变量转换为带整数的数组
- 索引不是连续整数的数组长度