【问题标题】:setbase(8) and std::cout<<std::octsetbase(8) 和 std::cout<<std::oct
【发布时间】:2011-01-11 16:29:25
【问题描述】:

std::cout&lt;&lt;std::setbase(8)&lt;&lt;32; 和 std::cout&lt;&lt;std::oct&lt;&lt;32; 有什么区别?它们是等价的吗?

还有,std::cout.oct的目的是什么??

【问题讨论】:

  • 我不敢相信他们包括oct 但不包括bin
  • @Charles Salvia:八进制输出/输入从一开始就使用 C。二进制输出/输入似乎是多余的,因为有一个简单的转换到 Oct(3 个二进制数字)或 Hex(4 个二进制数字)
  • 我仍然同意查尔斯的观点,如果有一个 bin 标志会很好。它使 bit-bashing 和 bit-mask 相关的工作更容易调试。
  • @Charles:setbase 也只接受 8、10 或 16,所以它们不支持二进制是完全一致的

标签: c++ iomanip


【解决方案1】:

std::oct 将 str 流的基域格式标志设置为 oct。

std::setbase 将 basefield 格式标志设置为其可能的值之一:hex、dec 或 oct,具体取决于 base 参数的值。

我认为最大的区别在于 setbase 接受一个参数,因此您可以将一个包含所需数字基数的变量传递给它。而不是用一堆 if 语句来检查变量并使用 dec、oct 或 hex。

不过我不确定 std::cout.oct。

【讨论】:

  • std::ostream::oct 可以用作掩码来检查是否设置了oct 位。喜欢:if (std::cout.flags() &amp; std::cout.oct)。而std::oct 只是一个 IO 流操纵器函数,旨在插入流中。
猜你喜欢
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
  • 2015-11-27
  • 2015-11-08
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多