我正在使用此代碼來試圖找出數字中有多少位。下面的十六進制數字打開所有位。這個代碼爲什麼給一個數字(而不是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