2010-05-02 5 views
6

Я присвоил значение дополнения переменной unsigned.Почему эта программа C выдает отрицательное число?

Тогда почему эта программа C выдает отрицательное число?

#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

Ваш вопрос должен быть: «Почему компилятор не выдает предупреждение при компиляции этого кода?». Ответ: «Включите предупреждения в компиляторе (например,« WALL »)» –

ответ

14

Формат %d спецификатор инструктирует printf лечить аргумент как целое число. Вместо этого используйте %u.

4

Это потому, что% d является подписанным записями формата int, поэтому он преобразуется. Используйте% u для unsigned.