unsigned long long value = 0;
bool result = value >= std::numeric_limits<signed int>::min();
这应该是真的但是假的?为什么以及如何解决?
答案 0 :(得分:3)
int转换为unsigned int以进行比较。您可以将unsigned long long
投射到long long
。
5/9:
许多期望的二元运算符 算术或枚举的操作数 类型导致转换和产量 结果类型以类似的方式。该 目的是产生一个共同的类型, 这也是结果的类型。 这种模式通常被称为 算术转换,是 定义如下:
...
然后,如果 两个操作数都是无符号的 其他应转换为未签名 长。
...
否则,如果任一操作数是 未签名,另一个应转换 无签名。
unsigned long long
和long long
不是c ++ 03中的标准类型,但编译器很可能会使用上面定义的机制来处理这些类型。然后,上述转换规则将涵盖此特定转换。