2010-05-02 5 views
6

Ho assegnato il valore del complemento in una variabile senza segno.Perché questo programma C emette un numero negativo?

Quindi perché questo programma C emette un numero negativo?

#include<stdio.h> 
#include<conio.h> 

int main() 
{ 
    unsigned int Value = 4;   /* 4 = 0000 0000 0000 0100 */ 
    unsigned int result = 0; 

    result = ~ Value;    /* -5 = 1111 1111 1111 1011 */ 

    printf("result = %d", result); /* -5    */ 

    getch(); 

    return 0; 
} 
+0

La tua domanda dovrebbe essere: "Perché il compilatore non emette un avviso quando compilo questo codice?". La risposta è: "Alzare gli avvertimenti sul compilatore. (Es. -Wall)" –

risposta

14

L'identificatore di formato %d incarica printf per trattare l'argomento come intero con segno. Utilizzare invece %u.

4

È perché% d è il segnaposto con formato int firmato, quindi viene convertito. Utilizza% u per non firmato.