#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
来编译您的代码,应该会警告有关已签名/未签名比较的内容。(如果您没有忽略警告)
std::size_t
必须是一个无符号类型。 - James Kanzeif(1)
也可以得到合理的结果,因为sizeof
永远不会返回负值。 - M.Msizeof
的类型是 size_t
(typedef unsigned int size_t
)。unsigned int
与有符号数比较可能导致错误的答案。
unsigned int
。unsigned long
和 unsigned long long
可能更常见。唯一的要求是它必须是无符号整数类型。 - James Kanze
main
函数中的return 0
不是必需的。 - jrokmain
函数中不需要使用return 0
。 - juanchopanza