为什么只在这句话中输入失败?

时间:2018-04-28 08:49:12

标签: c++ casting

当我尝试用这句话打印十六进制数时,我遇到了这个问题:

cout << (a > 9 ? (char)('A' + a - 10) : a);

然而,当a > 9时,它会打印一个整数,而不是一个字符。 但是

cout << (char)('A' + a - 10);

运作良好。 为什么会这样?我该如何解决? 谢谢你的提示。

2 个答案:

答案 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');