【发布时间】:2012-11-01 14:55:54
【问题描述】:
我试图了解通常的算术转换并尝试测试:
(static_cast<unsigned char>(std::numeric_limits<unsigned char>::max()) > static_cast<signed char>(-1))
这评估为真,这没关系,但根据算术转换它应该导致假(最后一个项目符号):
对操作数执行积分提升,如下所示:
如果任一操作数的类型为无符号长整数,则另一个操作数为 转换为 unsigned long 类型。
如果前面的条件不满足,并且任一操作数的类型为 long 和另一个 unsigned int 类型,两个操作数都转换为 输入 unsigned long。
如果前面两个条件不满足,并且任一操作数是 long 类型的,另一个操作数被转换为 long 类型。
如果前面三个条件都不满足,并且任一操作数 是 unsigned int 类型,另一个操作数转换为类型 无符号整数。
如果前面的条件都不满足,则两个操作数都是 转换为 int 类型。
最后一个项目符号表示,如果不满足其他条件,则两个操作数都将转换为 int 类型。在此 unsigned char(max_char) 之后,位模式将仅填充为 1,而 signed char(-1) 将具有仅以 1 填充的位模式。这意味着 1 > 1 == false,但我得到了正确的结果。有什么想法吗?
【问题讨论】:
标签: c++