在javascript中实现可扩展哈希表:如何使用二进制数作为索引
我正在研究数据结构,并试图从零开始在Javascript中实现可扩展哈希,但我感到困惑。这里有一个例子,我正在使用作为参考 示例:在大小为8个索引/深度为3的表中存储“john”:35(二进制哈希的最后3位)在javascript中实现可扩展哈希表:如何使用二进制数作为索引,javascript,binary,hashtable,Javascript,Binary,Hashtable,我正在研究数据结构,并试图从零开始在Javascript中实现可扩展哈希,但我感到困惑。这里有一个例子,我正在使用作为参考 示例:在大小为8个索引/深度为3的表中存储“john”:35(二进制哈希的最后3位) “john”被转换成散列,例如:13 13转换为二进制:1101 通过查看最后3位数字“101”,找出表1101的索引所属 这就是我被困的地方。我是否应该将101转换回十进制形式(即5),然后通过执行数组[5]来访问索引?有没有一种方法可以像array[101]那样以二进制格式标记数组索引
第一篇帖子-提前感谢 在内部,计算机中的所有数据都存储在二进制中,因此您无法将十进制“转换”为二进制,因为所有数据都已经是二进制的(只是显示为用作十进制)。如果要将数字打印为二进制以进行调试,可以执行以下操作:
console.log((5).toString(2)); // will print "101"
.toString(2)
方法将数字转换为二进制表示的字符串
您还可以通过以0b
开头,以二进制形式写入数字:
let x = 0b1101; // == 13
如果要获取某个数字的最后几位二进制数字,请使用模运算器将其设置为所需位数幂的2:
(0b1101 % (2**3)).toString(2) // "101"
选中该表后,您可能希望将尚未使用的其余数字用作表中的索引。我们可以使用位移位运算符>
,来执行此操作:
(0b1101 >> 3).toString(2) // "1", right three bits cut off
使用更长的数字:
// Note that underscores don't mean anything, they are just used for spacing
(0b1101_1101 >> 3).toString(2) // "11011" you can see that the right three bits have been cut off
请记住,您可能不应该使用
.toString(2)
来实际存储表中的任何内容;它应该只用于调试。谢谢,这简化了我的一些代码。澄清一下——在图片中,教授正在以二进制格式标记表的索引,用于理论目的?要真正访问数组['101'],仍然可以使用数组[5]?是的,我相信是这样(尽管我的话是有道理的,我不在你们班)。如果你真的想写,你可以写array[0b101]
,计算机会读作array[5]