如果一个人需要比较int x有unsigned int y哪些是比较安全/更好/中更好的C99与gcc 4.4+:
(unsigned int)x == yx == (int)y有关系吗?
Mar*_*ers 16
最安全的是在投射前检查数字是否在范围内:
if (x >= 0 && ((unsigned int)x) == y)
Run Code Online (Sandbox Code Playgroud)
是的,这很重要.
在具有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,因为在大多数平台上转换0xffffffff为int收益率-1(两个补码为负数).严格来说,这是实现定义的行为,因此可能在不同的平台上有所不同.
请注意,在任何情况下,您都将获得"预期"结果0.Mark Byers的回答给出了一个很好的实现.
| 归档时间: |
|
| 查看次数: |
18543 次 |
| 最近记录: |