在C ++ base 8或16中打印负值

时间:2011-09-10 18:34:52

标签: c++

C ++如何在基数8或16中打印负值?我知道我可以尝试我当前的编译器/库所做的事情(它打印位模式,前面没有减号)但我想知道应该做什么,最好是带参考。

2 个答案:

答案 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说明符将其参数解释为无符号整数。

(是的,我知道这些是标准文件的古怪选择。如果你看起来足够努力,我相信你可以在你最喜欢的副本中找到这些文字。)