如果你看GA(谷歌分析),268435455,2147483647將使用這些數字進行位操作。爲什麼在javascript中直接在你的代碼中使用大數字?
的Airbnb也可以使用這些數字和按位運算符:3266489909,2246822507,3864292196.
例子)
function n(e, t) {
return (65535 & e) * t + (((e >>> 16) * t & 65535) << 16) & 4294967295
}
function r(e) {
for (var t = e.length, r = 3432918353, o = 461845907, i = 0, u = void 0, a = t & -4, c = 0; c < a; c += 4) u = e.charCodeAt(c) | e.charCodeAt(c + 1) << 8 | e.charCodeAt(c + 2) << 16 | e.charCodeAt(c + 3) << 24, u = n(u, r), u = u << 15 | u >>> 17, u = n(u, o), i ^= u, i = i << 13 | i >>> 19, i = 5 * i + 3864292196 | 0;
switch (u = 0, t % 4) {
case 3:
u = e.charCodeAt(a + 2) << 16;
case 2:
u |= e.charCodeAt(a + 1) << 8;
case 1:
u |= e.charCodeAt(a), u = n(u, r), u = u << 15 | u >>> 17, u = n(u, o), i ^= u
}
return i ^= t, i ^= i >>> 16, i = n(i, 2246822507), i ^= i >>> 13, i = n(i, 3266489909), i ^= i >>> 16, i >>> 0
}
我想知道爲什麼它以這種方式。
'268435455..toString(2)===「1111111111111111111111111111'' – Ryan
100101 ...沒有在漫長的十進制數的二進制代碼是什麼意思?。? – Integral
'268435455 ===(1 << 28) - 1'。魔術數字在位操作中通常是可以接受的。 – 4castle