Perché è (sizeof (int)> -1) falso?

Puoi giustificare il seguente codice:

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

L’output è FALSE ….. suggeriscimi il motivo

sizeof(int) ha tipo size_t , che è un tipo intero senza segno.

-1 ha tipo int , che è un tipo intero con segno.

Quando si confronta un intero con segno con un numero intero senza segno, prima il numero intero con segno viene convertito in non firmato, quindi il confronto viene eseguito con due interi senza segno.

sizeof(int) > (unsigned int)-1 è false, perché (unsigned int)-1 è un numero molto grande sulla maggior parte delle implementazioni (uguale a UINT_MAX o al numero più grande che si adatta a un unsigned int ).

 sizeof 

produce un valore di un tipo senza segno (cioè size_t ).

Nell’espressione sizeof(int) > -1 , si applica la normale conversione aritmetica e -1 viene convertito nel tipo unsigned di sizeof che risulta in un valore non firmato enorme maggiore di -1 .

È perché l’operatore sizeof restituisce un tipo intero senza segno. Se confrontato con un tipo intero con segno, il numero intero con segno viene convertito in non firmato. Quindi, in effetti, si stava confrontando sizeof(int) con il numero intero senza segno più grande ansible.

Puoi forzare la dimensione a firmare tramite casting:

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