void main(){if(sizeof(int)> -1)printf(“true”); else printf(“false”); ;
void main() { if(sizeof(int) > -1) printf("true"); else printf("false"); }
我期望输出是真实的,但这是错误的。 任何人都可以解释我输出的原因。
sizeof(int)的types是size_t ,它是一个无符号整数types。 所以在expression式if(sizeof(int) > -1) , -1被转换为一个非常大的无符号整数。
顺便说一下,使用int main而不是非标准的void main 。
sizeof(int)返回size_t,它与unsigned int 。
通常的算术转换是隐式执行的通用types。
int --> unsigned int --> long --> unsigned long --> long long --> unsigned long long --> float --> double --> long double
作为隐式转换的一部分, int值(-1)被转换为unsigned int 。
16 bit machine(for example)在16 bit machine(for example) -1将被表示为0xFFFF 。
所以expression成为,
if(sizeof(int) > -1 ) ==> if(2 > 0xFFFF)
并打印false 。 我build议尝试if((int)sizeof(int) > -1 )得到正确的结果。
sizeof提供的值的数据types是size_t ,它是(在大多数机器中)一个unsigned int/long ,因此,当你将它与-1进行比较时, -1被升级为unsigned ,然后变成0xFFF.. ,这就是数据types可容纳的最大值,因此您的比较失败。