在返回表达式中奇怪地使用&运算符

Saa*_*ain -4 c c++ return function

我不明白第一个例子中"&"的功能我之前没有经历过这种返回语句,请解释一下!谢谢

以下是一些功能的示例

uint hashToRange(int h)        {return h & mask;}
 // In this example mask is the data member of generic class 
 // These are some similar examples
   bool lessIndex(intT a, intT b) 
   {
        return 2 * hashToRange(a - b) > m;
   }

   inline int hashInt(unsigned int a) {  

      return hash(a) & (((unsigned) 1 << 31) - 1);
    }
Run Code Online (Sandbox Code Playgroud)

das*_*ght 6

运算符&是一个按位AND运算符.在这种特殊情况下,它用于屏蔽32位数字中的符号位.

以下是它的工作原理:(unsigned) 1 << 31二进制的值是一个数字,其中第31位设置为1,所有剩余的位设置为零:

10000000 00000000 00000000 00000000
Run Code Online (Sandbox Code Playgroud)

1从中减去产生一个数字,其中低31位设置为1,符号位设置为零*:

01111111 11111111 11111111 11111111
Run Code Online (Sandbox Code Playgroud)

这成为应用的蒙版hash(a).当你对它执行按位AND时,你得到的数字hash(a)除了最重要的"符号"位之外都有所有位,现在它被设置为零.

注意:此代码假设int并且unsigned都是32位类型.该标准并不保证这是真的.更好的方法是使用int32_tuint32_t类型来确保确切的大小.

*同样的原则在这里起作用,当你从10000中减去1并得到9999时.