cuando se almacena un entero positivo grande se convierte a un número negativo diferente

Cuando almaceno un entero positivo grande en int sin signo largo en c, entonces, sin saberlo, se convierte en un número negativo.

por ejemplo

a=2075000020, b=100000000,here a+b=-2119967266. 

Por favor ayúdame a entender.

No puede haber estado imprimiendo un entero sin signo, porque ha impreso un signo . Incluso si declara la variable como unsigned , una vez que está en la stack para que la use printf() , se interpreta como un valor binario que se utilizará como lo especifica el formato en printf() .

Note la diferencia entre estos y los resultados. En el tercer ejemplo, puede ver que el bit 31 está activado, que es el bit de signo para signed long int . signed long int .

 #include  #include  int main () { unsigned long int a=2075000020, b=100000000, c; c = a + b; printf ("Signed %ld\n", c); printf ("Unsigned %lu\n", c); printf ("Hexadecimal 0x%lX\n", c); return 0; } 

Salida del progtwig:

 Signed -2119967276 Unsigned 2175000020 Hexadecimal 0x81A3DDD4