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

时间:2014-12-18 20:46:59

标签: c++ c function return

我不明白“&”的功能在第一个例子中 我之前没有经历过这种回复陈述,请解释一下! 感谢

以下是一些功能的例子

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);
    }

1 个答案:

答案 0 :(得分:6)

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

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

10000000 00000000 00000000 00000000

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

01111111 11111111 11111111 11111111

这将成为应用于hash(a)的蒙版。当你对它执行按位AND时,你得到一个数字,其所有位都是hash(a),除了最重要的“符号”位,现在它被设置为零。

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

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