首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><<是什么意思?

问<<是什么意思?
EN

Stack Overflow用户
提问于 2015-08-10 03:07:19
回答 2查看 130关注 0票数 0

谢谢你看这个问题。

我在一个传统的for块中看到了下面的代码,但不确定它在上下文中的意义是什么。

index <<= 1;

对于进一步的上下文,下面是完整的代码块。

代码语言:javascript
复制
ulong index = 1;
int distance = 0;
for (int i = 0; i < 64; i++)
{
    if ((hash1 & index) != (hash2 & index))
    {
        distance++;
    }

    index <<= 1;
}

它是否只是确保索引仍然是1,如果不是,将它的值返回到1吗?

第二,这叫什么,这样我就可以多读一些。

最后,谢谢您的时间和考虑这件事。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-10 03:22:23

所讨论的代码正在遍历一对64位散列(可能是ulongs,如index),并检查它们之间有多少位不同。例如,我将使用4位值,但原则是相同的。

代码语言:javascript
复制
 if ((hash1 & index) != (hash2 & index))

&运算符正在执行按位操作。当哈希是带有索引值的ANDed时,将得到0或索引值,这取决于该特定位是0还是1 (1010 & 0010 == 0010和1010 & 0100 == 0000)。

如果两者都生成0,或者两者都生成索引值,则哈希的两位匹配。否则,它们就不会了,我们用distance++;来表示它们比我们以前知道的要差一点。

代码语言:javascript
复制
index <<= 1;

这一行只是将索引数字转到下一位。它采用旧的索引(从1开始,等于0001)和左移 by one place (<< 1),然后将其设置为index变量(<<=而不是<<)。因此,在第一个循环之后,index将是0010,然后是0100,等等。

这有乘以2的效果,但这不是它的预期用途。

所以总的来说,通过这个算法运行0011和1111可以得到2的0011值,因为两位是不同的。

票数 9
EN

Stack Overflow用户

发布于 2015-08-10 03:09:40

密码

代码语言:javascript
复制
index <<= 1;

是左移一点。在这种情况下,它的效果与乘以2一样。但注意事项见评论。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31911104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档