比较int和unsigned int

时间:2011-11-22 20:12:39

标签: c gcc

如果需要将int xunsigned int y进行比较,C99gcc 4.4+更安全/更好/更好:

  1. (unsigned int)x == y
  2. x == (int)y
  3. 重要吗?

2 个答案:

答案 0 :(得分:16)

最安全的是在投射前检查数字是否在范围内:

if (x >= 0 && ((unsigned int)x) == y)

答案 1 :(得分:7)

是的,这很重要。

在32位int的平台上,例如

int x = -1;
unsigned y = 0xffffffff;

表达式x == y会产生1,因为通过“通常的算术转换”,x的值将转换为unsigned,从而转换为0xffffffff

表达式(unsigned int)x == y也是1。唯一的区别是您使用强制转换显式转换。

表达式x == (int)y很可能也是1,因为在大多数平台上将0xffffffff转换为int会产生-1(两个补码为负数)。严格来说,这是实现定义的行为,因此可能在不同的平台上有所不同。

请注意,在任何情况下,您都不会获得“预期”结果0Mark Byers' answer中给出了一个很好的实现。