gpt4 book ai didi

c++ - C++ 中的位缓冲区

转载 作者:太空狗 更新时间:2023-10-29 20:42:06 26 4
gpt4 key购买 nike

我正在做一个作业,我需要将位写入缓冲区,一旦缓冲区填满 8 位,我就会刷新。 (霍夫曼压缩)

我在输入期间分配/保存中间阶段时遇到问题。所以我做了一些测试,比如

char buf = 0;

cout << (buf | (1 << 1));
buf = (buf | (1 << 1));
cout << buf;

但不明白为什么我不能保存中间阶段。其输出将是:

2"happy face"

代替

22

能教我如何保存中间阶段吗?

基本上,我需要一点一点地写入缓冲区,一旦缓冲区是一个字节,我就会将它刷新到我的输出文件。

最佳答案

原因有点棘手 - 它与您写到 cout 的表达式类型有关,而不是作为按位表达式的结果获得的值。

在第一种情况下,表达式是(buf | (1 << 1)) .根据 C++ 的规则,此表达式的类型为 int : OR 的左侧展开以匹配右侧。

在第二种情况下,表达式的类型是char , 因为操作已经完成,结果已经转换回 char .

这就是为什么第一个值被解释为数字,而第二个值被解释为 ASCII 字符代码 2,当在您的系统上打印时对应于 ☺。添加 Actor 应该可以解决这个问题。

关于c++ - C++ 中的位缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20002921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com