我的位掩码有什么问题?

时间:2012-10-18 18:11:24

标签: c++ arrays bitmask

  1. 我应该创建n个位数组,n不是常量!为什么程序会给垃圾而不是我的数组?

  2. 如何将获取的数组写入文件,以便它们在那里?

  3. 示例:

    class bits {
         int *m;
         int razm;
         int num;
         int N;
      public:
         bits(int r,int NN) { N=NN; razm=r; num=0; m=new int[N*razm]; }
         ~bits() {delete(m);}
         void add() { m[num/32]|=(1>>(num%32)); num++;}
         bool read(int n,int bit) 
                { 
              return m[(razm*n-bit)/32]&(1>>((razm*n-bit)%32)); }
                };
    
        void main()
        {
        bits x(8,10000);
        char ch[100]={"11111122223334445698"};
         for (int i=0;i<100;i++)
          {
          for(int j=0;j<8;j++)
        if(ch[i]&(1<<j))
                x.add();
          }
    
         for (int i=0;i<100;i++)
          {
          for(int j=0;j<8;j++) { if(x.read(i,j)) cout << "1"; else cout << "0"; }
          cout << "\n";
          }
        }
    

2 个答案:

答案 0 :(得分:1)

你正在向右移动

(1>>(num%32))
(1>>((razm*n-bit)%32))

你应该左转。向右移动会产生0,除非余数为0。

答案 1 :(得分:0)

您的new int[N*razm]表达式没有初始化内存,因此您的位数组以不确定的内容(可能是随机垃圾)开头。如果要将值初始化为零,则将其更改为new int[N*razm](),请注意尾随括号。