Tenía curiosidad por saber qué pasaría si asignaba un valor negativo a una variable sin firmar.¿Qué sucede si asigno un valor negativo a una variable sin firmar?
El código se verá algo así.
unsigned int nVal = 0;
nVal = -5;
No me dio ningún error de compilación. Cuando ejecuté el programa, ¡el nVal
recibió un valor extraño! ¿Podría ser que el valor de complemento de 2 se asigne a nVal
?
Mi presentimiento de la 2 (no han podido encontrarlo en el estándar todavía) es que el comportamiento es técnicamente indefinido. Además, sospecho que verá lo que espera en casi cualquier compilador que pueda encontrar. Entonces, aunque normalmente verá ese comportamiento, probablemente no sea una buena idea contar con él. – sblom
No está indefinido (ver * §4.7/2 *), pero la representación (por ejemplo, el complemento 2s) no es un mandato de la norma. –
@gf (et al a continuación), genial. Parece que el comportamiento está, de hecho, explícitamente definido para ser lo que esperabas, @viswanathan. – sblom