如何在c ++中减去两个位集

时间:2009-07-27 08:59:39

标签: c++ bitsets

我有2个位组,每个位存储100位。我试图简单地用' - '减去,但此时我总是得到一个编译错误。你如何在c ++中减去2个位集?

提前致谢

3 个答案:

答案 0 :(得分:8)

如果你想清除第一个操作数中的所有位,那么你需要创建一个binnary并使用否定的第二个操作数:

std::bitset<10> first (string("1001001001"));
std::bitset<10> second (string("1001000000"));

cout << (first & ~second) << endl;

答案 1 :(得分:1)

我假设您指的是128位整数,并且正在尝试减去2个128位整数。我建议谷歌搜索BigNum - 一个旨在处理大数字的库。你所追求的功能可能已经实现。

答案 2 :(得分:0)

使用std :: bitset的to ulong(unsigned long)方法将两个bitset转换为unsigned long,减去unsigned long,然后使用减法结果构造一个结果中的新bitset。

#include <bitset>
#include <iostream>

int main( )
{

   std::bitset<10> b1 ( 77 );
   std::bitset<10> b2 ( 55 );

   unsigned long diff = b1.to_ulong() - b2.to_ulong();
   std::bitset<10> result( diff );
   std::cout << diff << std::endl;
   std::cout << result << std::endl;
   return 0;
}