2010-05-02 3 views
6

Ich habe den Komplementwert in einer vorzeichenlosen Variablen zugewiesen.Warum gibt dieses C-Programm eine negative Zahl aus?

Warum gibt dieses C-Programm eine negative Zahl aus?

#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

Ihre Frage sollte lauten: "Warum gibt der Compiler beim Kompilieren dieses Codes keine Warnung aus?". Die Antwort ist: "Drehe die Warnungen auf dem Compiler auf. (ZB -Wall)" –

Antwort

14

Die %d Formatbezeich anweist printf das Argument als eine vorzeichenbehaftete Ganzzahl zu behandeln. Verwenden Sie stattdessen %u.

4

Das liegt daran, dass% d der Platzhalter für das int-Format ist, der konvertiert wird. Verwenden Sie% u für unsigniert.