2011-04-17 76 views
2
unsigned long long value = 0; 

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

这应该是正确的,但会给出错误?为什么以及如何修复它?无法正确比较两个数字

+0

答案与您最后一个问题的答案相同(http://stackoverflow.com/questions/5692882/bug-in-boost-check)。 – 2011-04-17 14:25:00

回答

3

int转换为一个无符号整数进行比较。您可以将unsigned long long投射到long long

5/9:

意想不到的算术或枚举类型 事业转换 操作数,并以类似的方式产生 结果类型

许多二元运算符。 的目的是产生一个通用的类型, 这也是结果的类型。 这种模式被称为平常 算术转换,这是 定义如下:

...

然后,如果 操作数是无符号长的 其他应转换为无 长。

...

否则,如果一个操作数是无符号 ,其他应换算 为无符号。

unsigned long longlong long都不是标准的类型在C + + 03,但它很可能是编译器会把使用上面定义的机制这些类型。上述转换规则将涵盖此特定转换。