在返回表达式中奇怪地使用 & 运算符
Strange use of the & operator in a return expression
我不明白第一个例子中"&"的功能我以前没有在c中遇到过这种返回语句,请解释一下!谢谢
下面是一些函数的示例
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);
}
运算符 &
是按位 AND 运算符。在这种特殊情况下,它用于屏蔽 32 位数字中的符号位。
以下是它的工作原理:二进制中的 (unsigned) 1 << 31
值是一个数字,其中位 31 设置为 1,所有剩余位设置为零:
10000000 00000000 00000000 00000000
从中减去1
会产生一个数字,其中较低的 31 位设置为 1
,符号位设置为零*:
01111111 11111111 11111111 11111111
这将成为应用于hash(a)
的蒙版。当您对其执行按位 AND 时,您最终会得到一个数字,该数字包含除最高有效"符号"位(现在设置为零(之外的所有hash(a)
位。
注意:此代码假设int
和unsigned
都是 32 位类型。该标准不保证这是真的。更好的方法是使用int32_t
和uint32_t
类型来确保确切的大小。
* 这里的工作原理与从 1 中减去 10000 并得到 9999 的情况相同。
相关文章:
- 重载更少,则运算符返回相反的布尔值
- 使用重载 [] 运算符返回 std::map() 的可赋值
- 为什么我的超载"+"运算符返回的总额错误?
- (C++)为什么"||"逻辑运算符返回 1?
- 为流运算符返回代理类时解压缩参数
- C++ 运算符返回差异
- 重载运算符返回什么类型的值(对于用户定义的类型):右值还是左值?
- 运算符返回的指针的有效性 >
- 字符串流运算符>>返回值
- 动态指针引用数组由三元运算符返回值,但有异常
- 重载运算符返回的对象正在丢失 C++ 中的数据
- 如何使用设置运算符返回非 const 对象>
- 重载常量和非常量转换运算符返回数组类型时出现 MSVC 错误 C2593
- 为什么比较运算符"=="返回"YES"即使两个向量不同?
- 如何从重载的下标 [] 运算符返回 std::unique_ptr&?
- 从重载运算符返回对象>>
- 获取对运算符 [] 返回值unordered_map引用
- 我无法让这个虚拟模板化函子运算符返回正确的类型
- 为什么迭代器运算符 + 返回副本
- 从运算符[]返回对映射的char*的引用