Cómo convertir un entero sin signo en un entero
-1, 4294967295
65536, 65536
El análisis es el siguiente:
d: impresión de números enteros formato, firmado.
u: formato de impresión de números enteros, sin signo.
Creo que los resultados de salida de los otros tres deberían ser muy claros, principalmente ¿por qué el segundo es 4294967295?
El rango de valores de unsigned int es 0~4294967295. El valor entero se almacena en la memoria en su forma complementaria, que es positiva.
El complemento en sí lo es, pero el complemento de un número negativo no lo es. Lo explicaré en términos de tamaño de memoria en un byte: -1.
Código original: 1.000?0001, el bit más alto representa el bit de signo, 0 es positivo, 1 es negativo. El método de conversión de su complemento es: el bit de signo permanece sin cambios y el valor permanece sin cambios.
Suma 1 e invierte el bit. Por tanto, el complemento de -1 es: 1, 11? Para un int de 32 bits y 4 bytes, el método de conversión es el mismo.
Entonces, ¿int? I=-1, el valor del complemento almacenado en la memoria es: 1, ¿111?...? 1111?1111. Cuando se genera en formato u, la naturaleza del bit 1 más alto cambiará y el sistema de compilación cambiará el bit 1 más alto.
Además, como bit numérico en lugar de bit de signo, el valor de salida es 4294967295.