#include<stdio.h>
#include<conio.h>
void main()
{
if(sizeof(int)>=-2)
printf("True");
else
printf("False");
}
当我尝试使用Turbo C ++编译这段代码时,它返回False而不是True。 但是当我尝试打印int的值时,程序返回2。
这怎么可能?当sizeof(int)
返回2而且是2&gt; = - 2时。
答案 0 :(得分:16)
sizeof(int)
被替换为std::size_t
类型,在大多数实现上都是无符号。
由于签名被提升为无符号,因此使用unsigned签名导致奇怪的结果。
您可以获得合理的结果,如下所示
if(static_cast<int>(sizeof(int)) >= -2)
如果您正在使用C
编译器
if((int)sizeof(int) >= -2)
例如,使用某些警告标志-Wall
编译代码应该最有可能警告有符号/无符号比较。 (如果你没有忽略警告)
答案 1 :(得分:2)
sizeof
的类型为size_t
(typedef unsigned int size_t
)。 unsigned int
与签名相比可能会导致错误答案。