我看到下面的代码行这里的C.
int mask = ~0;
Run Code Online (Sandbox Code Playgroud)
我已经打印了maskC和C++ 的值.它总是打印-1.
所以我确实有一些问题:
~0要为掩码变量赋值?~0什么?-1而不是~0吗?我正在一个我无法访问C++标准库的环境中编写C++代码,特别是不能访问std::numeric_limits.假设我想实施
template <typename T> constexpr T all_ones( /* ... */ )
Run Code Online (Sandbox Code Playgroud)
专注于无符号整数类型,我放在那里?具体来说,static_cast<T>(-1)够好吗?(根据我的猜测,我可以将其他类型视为无符号字符数组.)
标题真的说明了一切:减一和蒂尔达(一补)零之间有什么区别?
在讨论指定所有位都设置的位掩码的最佳方法时出现了这个问题.以下哪项更好?
int func(int value, int mask = -1) {
return (value & mask);
}
Run Code Online (Sandbox Code Playgroud)
要么
int func(int value, int mask = ~0) {
return (value & mask);
}
Run Code Online (Sandbox Code Playgroud)
是否还有其他任何用途?
更新:在stackoverflow.com/q/809227/34509上有关于此主题的类似讨论,我在之前的研究中遗漏了这个问题 .感谢Johannes Schaub指出它.