math - 为什么 00000000 ^ 01000010 = 01000010?不应该是0吗?
问题描述
我班的工作人员提供了这个散列函数,它取 0 并将其提升为 ascii 字符的值,在她的回答中,它说答案(对于 ascii 'B')是 01000010 或 66。在我看来,我们将 0 乘以0、66 次。为什么等于 66?
这是代码:
int hash_it(char* needs_hashing)
{
unsigned int hash = 0;
for (int i=0, n=strlen(needs_hashing); i<n; i++)
hash = (hash << 2) ^ needs_hashing[i];
return hash % HASHTABLE_SIZE;
}
然后她继续解释:
i = 0
hash = 0x00
needs_hashing[0] = 'B'
hash << 2 = 0000
hash = 0x00 ^ 0x42 (0000 ^ 0100 0010) // <- 0 raised to 66
hash = 0x42 (0100 0010) //<-equals 66
任何帮助都会很棒,我觉得真的很愚蠢。
解决方案
该^
操作不是幂或幂或重复乘法,它是异或(有时写为 XOR)。这就是 C、C++、Java 和 Python 等计算机语言使用该^
字符的数量。在你的笔记中查找——我相信你的班级已经涵盖了它。在这种解释下,您给出的方程式是正确的。
推荐阅读
- c# - Unity 2D 自上而下播放器在鼠标指针上闪烁
- groovy - 为什么在设置顶点计时器时我的顶点承诺会在处理程序中设置
- popup - 有没有办法在货物集体上添加“添加到购物车通知”?
- python - 如何返回在 for 循环中创建的单击按钮的文本?
- python - 是否有解决方法在 django rest 中使用 URL 中具有特殊字符的字符串作为主键?
- tensorflow - TensorFlow 2.4:损失:0.0000e+00 但准确度:仅 0.2682,这有意义吗?
- batch-file - 如何从批处理文件向 COM 端口发送单个数字?
- python - 如何在波斯语 Python 中使用绘图栏
- android - Flutter 在选定的 Grids 中显示 json 数据
- r - 使用带有来自 read.csv2 数据的 ggplot 柱形图绘制变量