为什么(sizeof(int)> -1)为false? [重复]

问题描述 投票:1回答:3

你可以证明以下代码:

#include<stdio.h>
int main()
{
    if(sizeof(int) > -1)
    {
            printf("\nTrue\n");
    }
    else
    {
            printf("\nFALSE\n");
    }
}

输出是FALSE .....建议我的原因

c sizeof
3个回答
7
投票

sizeof(int)的类型为size_t,它是无符号整数类型。

-1的类型为int,它是一个有符号整数类型。

将有符号整数与无符号整数进行比较时,首先将有符号整数转换为无符号整数,然后使用两个无符号整数执行比较。

sizeof(int) > (unsigned int)-1是假的,因为在大多数实现中(unsigned int)-1是一个非常大的数字(等于UINT_MAX,或者适合unsigned int的最大数字)。


2
投票
sizeof

产生无符号类型的值(即size_t)。

sizeof(int) > -1表达式中,通常的算术转换适用,并且-1被转换为无符号类型的sizeof,这导致大于-1的无符号值。


2
投票

这是因为sizeof运算符返回无符号整数类型。与有符号整数类型进行比较时,有符号整数将转换为无符号整数。因此,实际上,您将sizeof(int)与最大可能的无符号整数进行比较。

您可以强制通过强制转换来签署大小:

#include <stdio.h>

int main()
{
    if((int)sizeof(int) > -1)
    {
            printf("\nTrue\n");
    }
    else
    {
            printf("\nFALSE\n");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.