比较int和unsigned int

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

  1. (unsigned int)x == y
  2. x == (int)y

有关系吗?

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

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

是的,这很重要。

在具有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 (两个补码为负数)。 严格来说,这是实现定义的行为,因此可能在不同的平台上有所不同。

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