Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用位实现集合_C++_Algorithm_Bitwise Operators - Fatal编程技术网

C++ 用位实现集合

C++ 用位实现集合,c++,algorithm,bitwise-operators,C++,Algorithm,Bitwise Operators,我正在阅读关于在以下位置以位表示的集合 class SetAsBitVector:公共集 { typedef无符号整数字; 枚举{wordBits=bitsizeof(Word)}; 阵列向量; 公众: SetAsBitVector(无符号整数); // ... }; SetAsBitVector::SetAsBitVector(无符号整数n): 集合(n), 向量((n+字位-1U)/字位) { //这里有问题吗? for(无符号整数i=0;i我将此标记为C++,因为它显然不是C. 循环。考

我正在阅读关于在以下位置以位表示的集合

class SetAsBitVector:公共集
{
typedef无符号整数字;
枚举{wordBits=bitsizeof(Word)};
阵列向量;
公众:
SetAsBitVector(无符号整数);
// ...
};
SetAsBitVector::SetAsBitVector(无符号整数n):
集合(n),
向量((n+字位-1U)/字位)
{
//这里有问题吗?
for(无符号整数i=0;i向量[项目/词位]=1>移位〉=1<P>我将此标记为C++,因为它显然不是C.</P>
  • 循环。考虑如果调用它的代码为“<代码> N< /代码>等于小于代码> WordBoe<代码>。泛型公式正是所使用的公式,即<代码> B=(A+Q—1)/Q < /代码>确保<代码> B*Q至少是<代码> A<代码> >
  • 基本的二进制算术,二除等于向右移位,以此类推
  • 在某些机器上,移位和掩码等位运算比除法和模运算快

  • 关于问题1,是否存在任何通用公式?关于第二个问题,移位和掩码的值是多少?请在此处进行elobarate
    class SetAsBitVector : public Set
    
    {
    
       typedef unsigned int Word;
    
       enum { wordBits = bitsizeof (Word) };
    
    
       Array<Word> vector;
    
    
    public:
    
        SetAsBitVector (unsigned int);
    
        // ...
    
    };
    
    SetAsBitVector::SetAsBitVector (unsigned int n) :
        Set (n),
    
                                                         vector ((n + wordBits - 1U) / wordBits)
    {
      // Question here?
       for (unsigned int i = 0; i < vector.Length (); ++i)
    
        vector [i] = 0;
    
    }
    
    void SetAsBitVector::Insert (Object& object)
    {
    
       unsigned int const item = dynamic_cast<Element&> (object);
    
       vector [item / wordBits] |= 1 << item % wordBits;
      // Question here
    }