Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中实现可扩展哈希表:如何使用二进制数作为索引_Javascript_Binary_Hashtable - Fatal编程技术网

在javascript中实现可扩展哈希表:如何使用二进制数作为索引

在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]那样以二进制格式标记数组索引

我正在研究数据结构,并试图从零开始在Javascript中实现可扩展哈希,但我感到困惑。这里有一个例子,我正在使用作为参考

示例:在大小为8个索引/深度为3的表中存储“john”:35(二进制哈希的最后3位)

  • “john”被转换成散列,例如:13
  • 13转换为二进制:1101
  • 通过查看最后3位数字“101”,找出表1101的索引所属
  • 这就是我被困的地方。我是否应该将101转换回十进制形式(即5),然后通过执行数组[5]来访问索引?有没有一种方法可以像array[101]那样以二进制格式标记数组索引(但是使用对象不是更好吗?)?这似乎有很多不必要的额外步骤来避免仅仅使用模(13%8),我是否遗漏了什么?这个实现在非javascript语言中有用吗


    第一篇帖子-提前感谢

    在内部,计算机中的所有数据都存储在二进制中,因此您无法将十进制“转换”为二进制,因为所有数据都已经是二进制的(只是显示为用作十进制)。如果要将数字打印为二进制以进行调试,可以执行以下操作:

    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]