C++ 如何将最低有效位写入缓冲区?

C++ 如何将最低有效位写入缓冲区?,c++,C++,我有一个writeBit方法,它应该将int I的最低有效位写入char类型的buffer buff,然后增加位缓冲区索引。 我不确定我所说的是否正确,任何意见都将受到赞赏 private: char buff; // buffer int num_bits; // num of bits written to buff std::ostream& os_ref; public: // Skipping the constructor and ostream& for b

我有一个writeBit方法,它应该将int I的最低有效位写入char类型的buffer buff,然后增加位缓冲区索引。 我不确定我所说的是否正确,任何意见都将受到赞赏

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?
}

我想这样应该行得通,让我知道:

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

buff |=(i&1)假设flush将num_位设置为零:

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

char unmask=~(1获取uint32的最低有效位:

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\u t i=1337;
uint8_t lsb=i&1;//将除第一位以外的所有位归零

buffer |=(lsb)你试过了吗?你面临什么问题?我在写其他方法之前无法尝试,所以我想知道我的方法在逻辑上是否有意义。
nbits
定义在哪里?对不起,应该是num_位。buff=buff&nbits;buff=lb;这两行加在一起不会改变任何东西“我想你需要
nbits-1
而不是
nbits
,因为你总是想走得稍微偏左。
1@Zaffy,不,这就是我们想要的。如果
nbits
等于7,我们想设置第8位(不是字节,但它是一个拼写错误?)。如何使
uint32\u t
unsigned int
更兼容?
uint32\u t
始终为32位,而
unsigned int
不保证32位宽。但是
uint32\u t
仅为C++11,是可选的类型定义。在计算中,当您缩小到
uint8\u t
时,您甚至不需要32位。<代码>未签名的INT/CUT>在每个C++实现中都是可用的,甚至是C++前11个实现。<代码> UINT32×T 是“兼容”的,<代码>未签署的int /代码>。是的,我知道,但我仍然认为类型中的位数是一个很好的实践。如果你不喜欢,请随意编辑我的答案。我不明白。y是一种很好的做法吗?如果你不依赖于类型中的确切位数,为什么要添加一个不必要的限制?(我不想编辑你的帖子,因为我不理解你的推理,我只是认为你应该扩展你的注释,因为只说“兼容性原因”这并不能真正解释你的论点。)