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

You are shifting right

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

where you should shift left. Shifting to the right produces a 0 except for when the remainder is 0.

于 2012-10-18T18:13:55.673 に答える
0

new int[N*razm]はメモリを初期化しないため、ビット配列は不確定な内容 (おそらくランダムなガベージ) で始まります。配列をゼロに初期化して値を変更する場合はnew int[N*razm]()、末尾の括弧に注意してください。

于 2012-10-18T18:28:12.647 に答える