标签: bitset

比较bitsets的最快方法(<bitset上的运算符)?

实现<运算符的最优化方法是什么,以std::bitset对应无符号整数表示的比较(它应该适用于位集more than 64 bits)?

一个简单的实现将是:

template<std::size_t N>
bool operator<(const std::bitset<N>& x, const std::bitset<N>& y)
{
    for (int i = N-1; i >= 0; i--) {
        if (x[i] && !y[i]) return false;
        if (!x[i] && y[i]) return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

当我说"最优化的方式"时,我正在寻找使用按位运算和元编程技巧(以及类似的东西)的实现.

编辑:我认为我找到了诀窍:模板元编程用于编译时递归和右位移,以便将位集比较为几个无符号长整数.但不明白如何做到这一点......

c++ algorithm bit-manipulation bitset c++11

11
推荐指数
2
解决办法
8000
查看次数

在C++中定义一个大的bitset

在我的程序中,我需要检查是否已经在一组2.5*10 ^ 9中生成了一个值.我希望生成大约一半的集合,并需要快速检查和更新它.在我看来,bitset是一个好主意,因为它不需要太多内存(每个值1位)并且速度很快.

问题是,当我在我的课程中定义我的设置时,我得到一个segmentation fault因为尺寸太大(它适用于较小的尺寸).

private:
  std::bitset<2500000000UL> cover; // not working
  std::bitset<25000UL> cover; // working
Run Code Online (Sandbox Code Playgroud)

任何的想法 ?

谢谢

PS:如果可能,我宁愿不使用外部库.我已经在使用GMP,但我不认为他们对大数字有一点设置.

c++ bitset

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

如何在C中实现bitset?

我一直在使用Java中的Bitset类,我想在C中做类似的事情.我想我必须手动完成它作为C中的大多数东西.什么是有效的实现方法?

byte bitset[]
Run Code Online (Sandbox Code Playgroud)

也许

bool bitset[]
Run Code Online (Sandbox Code Playgroud)

c bitset

9
推荐指数
2
解决办法
2万
查看次数

STL bitset :: count()方法的性能如何?

我四处搜索,找不到bitset :: count()的性能时间规范.有人知道它是什么(O(n)或更好)以及在哪里找到它?

编辑按STL我只参考标准模板库.

c++ performance stl bitset

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

Java BitSet,允许简单地连接BitSet

我需要一个BitSet,它允许多个BitSet的轻松连接创建一个新的BitSet.该默认实现不具备这样的方法.

在某些外部库中是否有任何实现,任何人都知道哪个允许轻松连接?

例如,假设我有一个bitarray 11111和另一个位数组010101.我想要附加功能.因此连接后会产生11111010101.

java concat bitset

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

如何将C++位集中的范围子集转换为数字?

我有一个std::bitset和bitset类型也提供了一个to_ulong方法来将bitset转换为数字,我的问题是关于将bitset转换为数字而只考虑该bitset中的一个范围,我需要实现我自己的powerof2函数或者有一些东西采用更标准的方法?

c++ bitset std-bitset

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

从整数数组构造bitset

bitset<64>从以下构造a很容易uint64_t:

uint64_t flags = ...;
std::bitset<64> bs{flags};
Run Code Online (Sandbox Code Playgroud)

但是,有没有构建一个很好的方式bitset<64 * N>,从一个uint64_t[N],这样flags[0]会是指最低的64位?

uint64_t flags[3];
// ... some assignments
std::bitset<192> bs{flags};  // this very unhelpfully compiles
                             // yet is totally invalid
Run Code Online (Sandbox Code Playgroud)

或者我不得不set()在循环中打电话?

c++ bitset c++11

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

如何将二进制值字符串转换回char

注意:我只关心信件.bitset 000001将是aA.

我有一个string名字s的值"abc".我把每char一个string并通过使用转换为二进制值bitset.

例如

bitset <6> b1 = s[0];   //a
bitset <6> b2 = s[1];   //b
bitset <6> b3 = s[2];   //c
Run Code Online (Sandbox Code Playgroud)

然后我希望把结果放到一个arraystrings.阵列的名称是arr(以及每个stringarray将代表每一个的二进制值char)

例如

arr[0]   //will hold the value of char 'a' in binary form which is 000001
arr[1]   //will hold the value of char 'b' in binary form which is …
Run Code Online (Sandbox Code Playgroud)

c++ arrays string binary bitset

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

问:里面的位置如何?

问题很简单(要问),与记忆std::bitset<32>是一回事uint32_t吗?或者更像是std::array<bool, 32>

我经常这样做:

uint32_t  index : 20;
uint32_t  magic : 12;
Run Code Online (Sandbox Code Playgroud)

那么它和这段代码一样吗?

std::bitset<20>  index;
std::bitset<12>  magic;
Run Code Online (Sandbox Code Playgroud)

c++ bit-manipulation bitset

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

有效地计算Set <Integer>的类似BitSet的实现的hashCode

我想知道,如何有效地计算hashCode类似BitSet的实现Set<Integer>.

BitSet#hashCode显然是快速地计算,而愚蠢的(*)和不兼容的Set#hashCode().

快速兼容的实现可能会像

int hashCode() {
    int result = 0;
    for (int i=0; i<bits.length; ++i) {
        long word = bits[i];
        result += 64 * i * Long.bitCount(word) + weightedBitCount(word);
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

如果有一个有效的实施

int weightedBitCount(long word) { // naive implementation
    int result = 0;
    for (int i=0; i<64; ++i) {
        if ((word & (1L << i)) != 0) {
            result += i;
        }
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

如果未设置大多数位,可以通过测试word==0 …

java hashcode bitset

9
推荐指数
2
解决办法
330
查看次数