显然,JavaScript中的数字不是显式类型的,而是由解释器表示为类型。我刚刚看到谷歌的V8 JS引擎说它已经针对32位数进行了大幅优化,但发现奇怪的是,许多JS程序员即使使用浮点也需要双打。我个人能想到的唯一例子是,如果我划分两个整数,我常常为了将屏幕坐标标准化为0到1,并且解释器将结果截断为64位而不是32位。这也是对我来说似乎不太可能,但是我再也不知道需要这种精确度的人会如何指定它。所以现在我想知道......有没有办法确保两个(非巨大的)整数的商在32位以下?
答案 0 :(得分:1)
我刚刚看到谷歌的V8 JS引擎的一个事情,它表示它已经针对32位数进行了大幅优化
这仅表示V8会在内部将这些数字存储为整数,因为它可以推断它们将保持在相应的范围内。例如,这对于计数器或数组索引很常见。
有没有办法确保两个(非巨大的)整数的商的长度小于32位?
否 - 所有算术运算都像64位浮点数一样执行(就像JS中的所有数字一样)。他们唯一能做的就是将结果截断回32位整数。你将bitwise right shift operator用于内部将其操作数转换为整数的那些:
var q = (a / b) >>> 0;
有关详细信息,请参阅What is the JavaScript >>> operator and how do you use it?。