我正在做一个分配工作,需要向缓冲区中写入位,一旦缓冲区中已填充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
。
这就是为什么第一个值像数字一样解释的原因,而第二个值像在系统上打印时对应于that的ASCII字符代码2一样被解释。添加演员表可以解决此问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句