程序 1:
#include <stdio.h>
int main()
{
if (sizeof(int) > -1)
printf("Yes");
else
printf("No");
return 0;
}
输出:无
程序 2:
#include <stdio.h>
int main()
{
if (2 > -1)
printf("Yes");
else
printf("No");
return 0;
}
输出:是
问题:
- 程序 1 和程序 2 有什么区别?
- 为什么
sizeof(int)
被认为是unsigned
? - 为什么程序 2 中的
2
被视为已签名
?
最佳答案
这是有符号和无符号整数之间常规算术转换的常见问题。 sizeof
运算符返回 size_t
类型的值,这是一些实现定义的无符号整数类型,在 <stddef.h>
中定义(另请参见 this answer)。
整数常量 -1
类型为 int
.当size_t
被实现为“至少”unsigned int
(这很可能发生在你的情况下),然后是二元运算符的两个操作数 <
被转换为无符号类型。无符号值不能为负,因此 -1
被大量转换。
关于有符号/无符号值与负值之间的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31890200/