为了账号安全,请及时绑定邮箱和手机立即绑定

immutablejs源码中这个计算数字哈希的函数的怎么理解?

immutablejs源码中这个计算数字哈希的函数的怎么理解?

德玛西亚99 2018-11-14 14:14:38
immutablejs源码中这个计算数字哈希的函数的怎么理解?function hashNum(o) {var type = typeof o;  if (type === 'number') {    if (o !== o || o === Infinity) {      return 0;    }    var h = o | 0;    if (h !== o) {      h ^= o * 0xFFFFFFFF;    }    while (o > 0xFFFFFFFF) {      o /= 0xFFFFFFFF;      h ^= o;    }    return smi(h);  }}// v8 has an optimization(优化组合) for storing 31-bit signed numbers(有正负符号数).// Values which have either 00 or 11 as the high order bits(高字节位) qualify(限定).// This function drops the highest order bit in a signed number(有正负符号数), maintaining(坚持,保卫)// the sign bit(符号位).function smi(i32) {  return ((i32 >>> 1) & 0x40000000) | (i32 & 0xBFFFFFFF);}
查看完整描述

1 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

首先明确 hashNum 函数的使用场景。

JS 默认采用了 IEEE-754 的 64 位双精度浮点数来存储数字,这使得数字的实际值域很大。hashNum 函数利用了
Chrome 对整数类型的优化,将 number 类型的浮点数映射为一个 32 位整数,从而加快比较速度。

因此,这个函数实际上是通过位运算的方式将浮点数转为了一个整数。在输入数字是一个不大的整数的条件下,函数返回的是整数本身。对于数字非常大和数字为浮点数的情形下,会返回一个 i32 格式的整数作为哈希结果。


查看完整回答
反对 回复 2018-12-15
  • 1 回答
  • 0 关注
  • 456 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号