0

二分木を下から上にトラバースしたい。

次に、このトラバージョン(=道)のビットシーケンスをcharに保存したいと思います。

この動作は動的でなければならないため、ビットシーケンスが 8 ビットを超える場合、char は動的に拡張する必要があります (たとえば、2 バイトなど)。

ビットシーケンスがたとえば 1001010 の場合、まったく同じビットシーケンスを char 内に格納したいと考えています。

ビットシフト演算子 << >> を使用する必要があることはわかっていますが、正しい方法がわかりません。

char に 8 ビットを書き込んだ後、問題が発生しました。

サンプルコードを添付しました。うまくいけば、誰かが光を当てることができます。

ありがとう

char* bits = malloc(sizeof(char));
char* temp_bits = NULL;

some loop
{
  if (cnt_bit > 7)
  {
    temp_bits = realloc(bits, sizeof(char)*2);
    free(bits);
    bits = temp_bits;
  }
  *bits = *bits << 1;
  *bits = *bits | 0;
  cnt_bit++;
}
4

1 に答える 1

1

あるメモリ値から次のメモリ値にシフトすることはできません! それをしたい場合は、通常は64ビットのタイプ「long long int」を使用しようとすることができますが、ジェネリックで機能する独自のシフト操作を実装しない限り、シフトでそれ以上進むことはできないと思います配列。

レベルごとに1バイトを使用することで、あなたがしていることははるかに高速になると思います。

于 2012-12-05T23:17:45.890 に答える