2

我有一个 writeBit 方法,它应该将 int i 的最低有效位写入 char 类型的缓冲区缓冲区,然后增加位缓冲区索引。我不确定我所拥有的是否正确,感谢任何输入。

private:
char buff;    // buffer
int num_bits; // num of bits written to buff
std::ostream& os_ref;

public:
// Skipping the constructor and ostream& for brevity

int writeBit(int i) {
  // flush buffer if full
  if(num_bits == 8)
  flush();

  // write least significant bit into the buffer at the current index.
  int lb = i & 1;
  buff = buff & num_bits;  // not sure about this line
  buff = lb;
  num_bits++;

  // return current index
  return num_bits; // do I return nbits as current index?
}
4

3 回答 3

0

假设 flush 将 num_bits 设置为零:

char unmask = ~(1 << num_bits);
buf &= unmask;
buf |= (i & 1) << num_bits;
++num_bits;

@Michael 的答案更好,如果 num_bits 的位始终为零。

于 2013-08-23T06:53:00.583 回答
0

要获取 uint32_t 的最低有效位:

uint32_t i = 1337;
uint8_t lsb = i & 1; // zeroes out all bits except first
buffer |= (lsb << num_bits); // shifts the lsb by num_bits to left and then ORs it into the char field

注意:出于兼容性原因,我使用uint32_t而不是。unsigned int

于 2013-08-23T06:53:14.163 回答
0

我想这样的事情应该有效,让我知道:

buff |= (i & 1) << nbits;

确保在 基本上buff设置为 0 ,获取最后一个有效位,将左边的位移动nbits次,并将该位添加到buffflush()
i & 1<< nbits

于 2013-08-23T06:50:24.947 回答