【发布时间】:2019-11-12 23:13:29
【问题描述】:
我无法理解如何比较两个 int,其中一个是 unsigned int32 而另一个是signed int32 工作。 让我们考虑这个简单的程序:
#include <stdint.h>
int main()
{
uint32_t a1 = UINT32_MAX;
int32_t b1 = (int32_t)a1;
if (a1 == b1)
printf("Equal");
else
printf("Not equal");
return 0;
}
在这种情况下,a1 超出了带符号的 32 位整数范围,因此正如我在调试时确认的那样,在它被转换后,b1 等于 -1。
但是它仍然打印“Equal”,而这些值显然不一样。是什么原因造成的?
【问题讨论】:
-
"检查 a1 值是否在有符号 32 位整数范围内。" -->
in_range = a1 <= INT32_MAX;