无法正确比较两个数字

时间:2011-04-17 14:15:29

标签: c++

unsigned long long value = 0;

bool result = value >= std::numeric_limits<signed int>::min();

这应该是真的但是假的?为什么以及如何解决?

1 个答案:

答案 0 :(得分:3)

int转换为unsigned int以进行比较。您可以将unsigned long long投射到long long

5/9:

  

许多期望的二元运算符   算术或枚举的操作数   类型导致转换和产量   结果类型以类似的方式。该   目的是产生一个共同的类型,   这也是结果的类型。   这种模式通常被称为   算术转换,是   定义如下:

...

  

然后,如果   两个操作数都是无符号的   其他应转换为未签名   长。

...

  

否则,如果任一操作数是   未签名,另一个应转换   无签名。

unsigned long longlong long不是c ++ 03中的标准类型,但编译器很可能会使用上面定义的机制来处理这些类型。然后,上述转换规则将涵盖此特定转换。