- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码:
public void AddHash( int val )
{
m_Hash ^= (val & 0x3FFFFFF);
m_Hash ^= (val >> 26) & 0x3F;
}
我非常想知道它到底做了什么,但我很高兴知道如何构建一个告诉我 m_Hash 是否有该数字的 bool HasHash( int val )
...
类似这样的东西吗?
public bool HasHash( int val )
{
return (m_Hash & val) == 0;
}
最佳答案
编辑以修复@schnaader发现的错误:它有什么作用?这段代码可能想要旋转val
向左(顺时针)移动 6 位并形成该旋转值与当前值的补码和(编辑:不是乘积,正如我之前所说的) - 异或 - m_Hash
产生一个新的m_Hash
。那个新的m_Hash
下次会用到AddHash( )
被调用。
但是,编写的代码有一个错误:它只旋转 val
的高位 6 位。向左,保留 val
的低位 26 位。然后代码将三个值异或在一起:
val
的新低位(旧高位)6位;val
的原始未移位低位 26 位;和m_Hash
的当前值将结果保留在 m_Hash
中。
它是如何做到的?您可以将其映射出来并进行模拟:
val & 0x3FFFFFF
表示提取val
的低26位。 xor
当前值为m_Hash
的那26位
现在轮类val
向右,使得低位 26 位从低位端消失,留下 val
原来的高位 6 位。 val
的低6位.
0x3f
仅提取那些低位 6 位(以防一些无关位被移入 val
的高位部分)。xor
当前值为 m_Hash
的低 6 位给予新的m_Hash
.您知道旋转和异或是计算哈希时的常见操作。
编辑: @schnaader 指出了原始代码中的错误:该代码忘记执行旋转的另一部分:将低位 26 位左移 6。要解决此问题,代码应如下所示:
public void AddHash( int val )
{
m_Hash ^= ((val & 0x3FFFFFF) << 6);
m_Hash ^= (val >> 26) & 0x3F;
}
至于你的HasHash( )
功能:这句话你应该知道
return (m_Hash & val) == 0;
在许多情况下都会返回 TRUE,包括一些您可能不想要的情况。例如,如果m_Hash == 0xC0
,该函数将返回TRUE。和val == 0x03
.
关于c# - 我数学很差,我想做二元运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5843940/
我对如何在 Python 3.4 中使用 asyncio 模块感到困惑。我有一个用于搜索引擎的 searching API,并希望每个搜索请求并行或异步运行,这样我就不必等待一个搜索完成再开始另一个搜
这是我遇到这个特殊问题的第二个项目。今天早些时候,我通过 Storyboard设置了一个表格 View 和原型(prototype)单元格。我添加了带有标记号的 subview ,这样我就可以从 ce
我是一名优秀的程序员,十分优秀!