我正在使用此代码来试图找出数字中有多少位。下面的十六进制数字打开所有位。这个代码为什么给一个数字(而不是53)的位给32?
for (var i = 0x1FFFFFFFFFFFFF, m = 0; i & 1; ++m, i >>>= 1);
出于某种原因,打印m
给32,但在SO后我阅读以下内容:
在JavaScript中所有的数字实际上是IEEE-754标准的浮点双打。这些都有一个53位的尾数,这应该意味着任何大小约为9千兆或更小的整数值都将被精确表示。
除非我错误地实现这一点,否则我不明白为什么打印m
应该给出32时应该有53位。有人可以解释吗?
我没有看到你的代码完成了什么。即使这对任意大小的数字都有效,如果你的'i'是一个像'111 ... 1110'这样的二进制表示的东西,你最终会得到'm = 0' – NullUserException 2013-03-22 00:11:38
@NullUserException这是怎么回事? – 2013-03-22 00:13:00
二进制表示中的任何0都会导致循环立即中止。所以如果你的二进制文件以0结尾,循环以第一次迭代结束。 – NullUserException 2013-03-22 00:15:17