2010-05-02 18 views
6

He asignado el valor de complemento en una variable sin signo.¿Por qué este programa C genera un número negativo?

Entonces, ¿por qué este programa C emite un número 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

Su pregunta debería ser: "¿Por qué el compilador no emite una advertencia cuando compilo este código?". La respuesta es: "Suba las advertencias en el compilador. (Por ejemplo, -Wall)" –

Respuesta

14

El especificador de formato %d instruye printf para tratar el argumento como un entero con signo. Use %u en su lugar.

4

Es porque% d es el marcador de posición con formato int. Firmado, por lo que se está convirtiendo. Use% u para unsigned.

Cuestiones relacionadas