当我尝试用这句话打印十六进制数时,我遇到了这个问题:
cout << (a > 9 ? (char)('A' + a - 10) : a);
然而,当a > 9
时,它会打印一个整数,而不是一个字符。
但是
cout << (char)('A' + a - 10);
运作良好。 为什么会这样?我该如何解决? 谢谢你的提示。
答案 0 :(得分:4)
表达式的类型在编译时确定,它不依赖于运行时条件。当条件(又称三级)表达式中的两个结果表达式不同时,它们必须转换为公共类型,这是表达式的整体类型。有关详细信息,请参阅Return type of '?:' (ternary conditional operator)。
在您的情况下,a
可能是int
,(char)('A' + a - 10)
是char
,因此常见类型为int
,因此cout
使用其方法打印int
而不是char
。
使用普通的if
:
if (a > 9) {
cout << static_cast<char>('A' + a - 10);
} else {
cout << a;
}
在执行有条件的操作后转换为char
。
cout << static_cast<char>(a > 9 ? ('A' + a - 10) : ('0' + a));
答案 1 :(得分:-1)
试试这个
cout << (char)(a > 9 ? ('A' + a - 10) : a + '0');