2010-05-02 11 views
6

Przypisałem wartość dopełnienia w niepodpisanej zmiennej.Dlaczego ten program C generuje liczbę ujemną?

To dlaczego ten program C generuje liczbę ujemną?

#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

Twoje pytanie powinno brzmieć: "Dlaczego kompilator nie wysyła ostrzeżenia podczas kompilowania tego kodu?". Odpowiedź brzmi: "Podnieś ostrzeżenia na kompilatorze (np. -Wall)" –

Odpowiedz

14

Format %d specifier instruuje printf traktować argument jako liczba całkowita ze znakiem. Zamiast tego użyj %u.

4

Dzieje się tak, ponieważ% d jest znakiem zastępczym formatu int, więc ulega przekształceniu. Użyj% u dla unsigned.

Powiązane problemy