【问题标题】:Compare int and bitset in c++在 C++ 中比较 int 和 bitset
【发布时间】:2013-03-11 21:09:53
【问题描述】:

如何将 bitset 与整数进行比较?或更一般地使用整数运算符: 像这样:

#include <iostream> 
#include <iomanip>
#include <bitset>
using namespace std;

int main()
{
bitset<4> _b1 = 3 ; 


if(_b1>=2 )
    cout<<_b1;



system("pause");
return 0;

}

【问题讨论】:

  • 你不应该使用以_开头的变量名;它们是为实现而保留的。
  • @AlexChamberlain No, they're not;这只适用于全局命名空间。对于局部变量,名称必须以下划线开头,后跟一个大写字符(或另一个下划线),以便实现保留。
  • @Praetorian 我通常不喜欢犯错,但在这种情况下,我会接受这样一个事实,即我会在明天忘记那些错综复杂的事情,并回到不使用任何变量以_开头。
  • @Praetorian:我更喜欢'no _'规则,不管它是否正确。它更简单,更容易记住,并且不会让我怀疑名称是否在全局命名空间中。并且符合它的代码不会违反更复杂的规则,也不会让人怀疑是否违反了更复杂的规则,或者他们是否记住了它。
  • this question 的第二个答案有一个很好的实现来比较 bitsets。

标签: c++ bitset


【解决方案1】:

使用std::bitset&lt;N&gt;::to_ulong():

if(_b1.to_ulong() >= 2)

【讨论】:

  • 这只适用于足够小的位集,否则你会得到一个例外。
  • @PeterWood:链接参考中也提到了这一点;)。使用to_ulong()to_ullong() 或附加bitset(取决于右侧和N,使用std::enable_if)的异常安全版本并不难编写,我将其留作练习到 OP。
  • 我知道它在参考中,我只是想避免缓存未命中(c:
【解决方案2】:

bitset 的方法to_ulongbitset 的值返回为unsigned long

【讨论】:

    【解决方案3】:

    你可以使用to_ulong来获取bitset的无符号整数值:

     _b1.to_ulong() 
    

    这里是ref。在你的情况下,它会:

    if(_b1.to_ulong()>=2 )
       cout<<_b1;
    

    你也应该避免system("pause")

    【讨论】:

      【解决方案4】:

      您可以使用 to_ulong(),并与 long 进行比较,或者可能将 ulong 转换为 int。

      【讨论】:

        猜你喜欢
        • 2022-01-24
        • 1970-01-01
        • 2013-11-04
        • 1970-01-01
        • 1970-01-01
        • 2020-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多