Cuando multiplico dos caracteres sin signo de C como este:se desborda al multiplicar caracteres sin signo?
unsigned char a = 200;
unsigned char b = 200;
unsigned char c = a * b;
Entonces sé que voy a tener un exceso de capacidad, y me sale (40'000 módulo 256) como resultado. Cuando hago esto:
unsigned char a = 200;
unsigned char b = 200;
unsigned int c = (int)a * (int)b;
Voy a obtener el resultado correcto 40'000. Sin embargo, no sé qué pasa con esto:
unsigned char a = 200;
unsigned char b = 200;
unsigned int c = a * b;
puedo estar seguro de lo correcto pasa? ¿Es este compilador dependiente? Del mismo modo, no sé lo que sucede cuando se hace una resta:
unsigned char a = 1;
unsigned char b = 2;
int c = a - b;
Al hacer "c" un unsigned char, probablemente obtener 255 como resultado. ¿Qué sucede cuando uso un int como este?
Sí, "promoción" era la palabra clave. Aquí encontré un poco más de detalle: https://www.securecoding.cert.org/confluence/display/seccode/INT02-C.+Understand+integer+conversion+rules –