C 位操作、保存位、8位后展开

C 位操作、保存位、8位后展开,c,bit-manipulation,C,Bit Manipulation,我想从下到上遍历一棵二叉树 然后我想将这个遍历(=路径)的位序列保存在一个字符中 这种行为应该是动态的,所以如果我有一个超过8位的位序列,字符应该动态扩展,例如,2个字节等等 如果位序列是例如1001010,我希望存储完全相同的位序列 在木炭里面 我知道我应该使用bitshift操作符>,但我不太明白 正确的方法 在我在字符中写入8位之后,我遇到了一个问题 我附上了一些示例代码,希望有人能提供一些帮助 谢谢 char* bits = malloc(sizeof(char)); char* tem

我想从下到上遍历一棵二叉树

然后我想将这个遍历(=路径)的位序列保存在一个字符中

这种行为应该是动态的,所以如果我有一个超过8位的位序列,字符应该动态扩展,例如,2个字节等等

如果位序列是例如1001010,我希望存储完全相同的位序列 在木炭里面

我知道我应该使用bitshift操作符>,但我不太明白 正确的方法

在我在字符中写入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++;
}
char*bits=malloc(sizeof(char));
char*temp_位=NULL;
一些循环
{
如果(cnt_位>7)
{
temp_bits=realloc(bits,sizeof(char)*2);
免费(比特);
位=温度位;
}

*bits=*bits你不能从一个内存值转移到下一个!如果你想这样做,你可以尝试使用“long-long-int”类型,通常是64位的,但是我认为你不能在移位中走得更远,除非你实现了你自己的移位操作,它在一个通用数组上工作


我认为,如果每级使用一个字节,您的操作速度会快得多。

一旦您有两个字符,您的位移位只在第一个字符(即低阶字节)上起作用。您需要自己手动实现位移位逻辑。不要在
realloc
之后执行
free