C ++如何在基数8或16中打印负值?我知道我可以尝试我当前的编译器/库所做的事情(它打印位模式,前面没有减号)但我想知道应该做什么,最好是带参考。
答案 0 :(得分:4)
似乎没有一个标准输出工具支持非小数的带符号格式。因此,请尝试以下解决方法:
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
。
答案 1 :(得分:2)
从n1905的§22.2.2.2.2(是的,真的),使用ios_base::hex
等同于stdio
格式说明符%x
或%X
。
从n1570的§7.21.6.1开始,%x
说明符将其参数解释为无符号整数。
(是的,我知道这些是标准文件的古怪选择。如果你看起来足够努力,我相信你可以在你最喜欢的副本中找到这些文字。)