比较int和unsigned int

Car*_*s00 10 c gcc

如果一个人需要比较int xunsigned int y哪些是比较安全/更好/中更好的C99gcc 4.4+:

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

有关系吗?

Mar*_*ers 16

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

if (x >= 0 && ((unsigned int)x) == y)
Run Code Online (Sandbox Code Playgroud)


und*_*gor 7

是的,这很重要.

在具有32位的平台上int,例如

int x = -1;
unsigned y = 0xffffffff;
Run Code Online (Sandbox Code Playgroud)

表达式x == y会产生,1因为通过"通常的算术转换",值x被转换为unsigned并因此转换为0xffffffff.

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

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

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