【发布时间】:2011-09-10 18:34:51
【问题描述】:
C++ 应该如何以 8 或 16 为基数打印负值?我知道我可以尝试我当前的编译器/库所做的事情(它打印位模式,前面没有减号)但我想知道应该做什么,最好有参考。
【问题讨论】:
-
标准说它相当于
%x或%oforprintf。
标签: c++
C++ 应该如何以 8 或 16 为基数打印负值?我知道我可以尝试我当前的编译器/库所做的事情(它打印位模式,前面没有减号)但我想知道应该做什么,最好有参考。
【问题讨论】:
%x 或%o for printf。
标签: c++
似乎没有一个标准输出工具支持非小数的有符号格式。因此,请尝试以下解决方法:
struct signprint
{
int n;
signprint(int m) : n(m) { }
};
std::ostream & operator<<(std::ostream & o, const signprint & s)
{
if (s.n < 0) return o << "-" << -s.n;
return o << s.n;
}
std::cout << std::hex << signprint(-50) << std::endl;
您可以根据需要在适当的位置插入0x。
【讨论】:
从 n1905 的 §22.2.2.2.2(是的,真的)开始,使用 ios_base::hex 等效于 stdio 格式说明符 %x 或 %X。
从 n1570 的 §7.21.6.1 开始,%x 说明符将其参数解释为无符号整数。
(是的,我意识到这些标准文档的选择很古怪。我相信如果你足够努力的话,你可以在你最喜欢的副本中找到文本。)
【讨论】: