谢谢你看这个问题。
我在一个传统的for块中看到了下面的代码,但不确定它在上下文中的意义是什么。
index <<= 1;
对于进一步的上下文,下面是完整的代码块。
ulong index = 1;
int distance = 0;
for (int i = 0; i < 64; i++)
{
if ((hash1 & index) != (hash2 & index))
{
distance++;
}
index <<= 1;
}它是否只是确保索引仍然是1,如果不是,将它的值返回到1吗?
第二,这叫什么,这样我就可以多读一些。
最后,谢谢您的时间和考虑这件事。
发布于 2015-08-10 03:22:23
所讨论的代码正在遍历一对64位散列(可能是ulongs,如index),并检查它们之间有多少位不同。例如,我将使用4位值,但原则是相同的。
if ((hash1 & index) != (hash2 & index))&运算符正在执行按位操作。当哈希是带有索引值的ANDed时,将得到0或索引值,这取决于该特定位是0还是1 (1010 & 0010 == 0010和1010 & 0100 == 0000)。
如果两者都生成0,或者两者都生成索引值,则哈希的两位匹配。否则,它们就不会了,我们用distance++;来表示它们比我们以前知道的要差一点。
index <<= 1;这一行只是将索引数字转到下一位。它采用旧的索引(从1开始,等于0001)和左移 by one place (<< 1),然后将其设置为index变量(<<=而不是<<)。因此,在第一个循环之后,index将是0010,然后是0100,等等。
这有乘以2的效果,但这不是它的预期用途。
所以总的来说,通过这个算法运行0011和1111可以得到2的0011值,因为两位是不同的。
发布于 2015-08-10 03:09:40
密码
index <<= 1;是左移一点。在这种情况下,它的效果与乘以2一样。但注意事项见评论。
https://stackoverflow.com/questions/31911104
复制相似问题