#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> =-2。

最佳答案

sizeof(int)替换为std::size_t类型,该类型在大多数实现中均未签名。

将签名与未签名进行比较会导致奇怪的结果,因为已将签名升级为未签名。

您可以得到明智的结果,如下所示

if(static_cast<int>(sizeof(int)) >= -2)

如果您正在使用C编译器
if((int)sizeof(int) >= -2)

例如,使用一些警告标志-Wall编译代码时,最有可能警告已签名/未签名的比较。 (如果您不忽略警告)

07-24 09:45
查看更多