使用JavaScript在16位片段中添加64位整数

时间:2011-08-23 11:35:12

标签: javascript

我有两个对象thisthat,每个对象都代表最高的属性abcd ,第二高,第二低和最低16位,表示每个中的64位无符号整数。

  • 这是否是添加它们的正确方法,适用于所有情况?
  • 效率最高,还是可以改进?

var a = this.a + that.a,
    b = this.b + that.b,
    c = this.c + that.c,
    d = this.d + that.d;
if (d > 0xffff)
    c += d >> 16,
    d %= d % 0xffff;
if (c > 0xffff)
    b += c >> 16,
    c %= 0xffff;
if (b > 0xffff)
    a += b >> 16,
    b %= 0xffff;
if (a > 0xffff)
    a %= 0xffff;
this.a = a;
this.b = b;
this.c = c;
this.d = d;

1 个答案:

答案 0 :(得分:3)

该代码中存在错误。

d %= d % 0xffff;应为d %= 0x10000;

c %= 0xffff;应为c %= 0x10000;,然后ba相同。

不是先添加然后再处理进位,而是从最低的组件开始,然后使用进位从下一个组件:

var d = this.d + that.d;
var c = this.c + that.c + (d >> 16);
d &= 0xffff;
var b = this.b + that.b + (c >> 16);
c &= 0xffff;
var a = this.a + that.a + (b >> 16);
b &= 0xffff;

这会在a中留下可能的溢出,如果您想忽略您只能执行a &= 0xffff;,否则您可以报告错误if (a > 0xffff)