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

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

例子:

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";
      }
    }
4

2 回答 2

1

你在右移

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

你应该左移的地方。除了余数为 0 时,右移产生 0。

于 2012-10-18T18:13:55.673 回答
0

Your new int[N*razm] expression doesn't initialize the memory so your bit array starts with indeterminate contents (possibly random garbage). If you want to value initialized the array to zeros change it to new int[N*razm](), note the trailing parentheses.

于 2012-10-18T18:28:12.647 回答