相关疑难解决方法(0)

"int mask =〜0;"的目的是什么?

我看到下面的代码行这里的C.

 int mask = ~0;
Run Code Online (Sandbox Code Playgroud)

我已经打印了maskC和C++ 的值.它总是打印-1.

所以我确实有一些问题:

  • 为什么~0要为掩码变量赋值?
  • 目的是~0什么?
  • 我们可以用-1而不是~0吗?

c c++ bit-manipulation masking bit-masks

44
推荐指数
4
解决办法
4066
查看次数

static_cast <T>( - 1)是否生成没有numeric_limits的全1位数据的正确方法?

我正在一个我无法访问C++标准库的环境中编写C++代码,特别是不能访问std::numeric_limits.假设我想实施

template <typename T> constexpr T all_ones( /* ... */ )
Run Code Online (Sandbox Code Playgroud)

专注于无符号整数类型,我放在那里?具体来说,static_cast<T>(-1)够好吗?(根据我的猜测,我可以将其他类型视为无符号字符数组.)

c++ bit-manipulation idiomatic

28
推荐指数
4
解决办法
1341
查看次数

-1和~0之间有什么区别?

标题真的说明了一切:减一和蒂尔达(一补)零之间有什么区别?

在讨论指定所有位都设置的位掩码的最佳方法时出现了这个问题.以下哪项更好?

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指出它.

c++ bitmask ones-complement

1
推荐指数
1
解决办法
274
查看次数