En el siguiente código:promoción tipo de datos en C
#include "stdio.h"
signed char a= 0x80;
unsigned char b= 0x01;
void main (void)
{
if(b*a>1)
printf("promoted\n");
else if (b*a<1)
printf("why doesnt promotion work?");
while(1);
}
que esperaba "ascendieron' a ser impreso pero, duerma Por qué Si puedo los tipos de datos a int firmado y sin firmar, y tener un tan..? un número negativo, por ejemplo, 0x80000000 y B como un número positivo, 0x01, "promovido" se imprime como se esperaba.
PLZ me ayudan a entender cuál es el problema!
@Mystical No entiendo tu respuesta. Incluso si se firma extendido para escribir int, lo que no creo que ocurra, pero suponiendo que lo haga, ¿por qué no se promueve a unsigned int y el producto es un número + ve? – Dom045
+1 - Esta respuesta es mucho mejor/más relevante que la mía por una milla larga (así que la eliminé) –
@ Dom045 Porque la especificación lo dice. Tanto 'signed char' como' unsigned char' son tipos inferiores a 'int'. Entonces ambos serán promovidos a 'int'. En el caso 'signed int' vs.' unsigned int', el estándar dicta que ambos se convertirán en 'unsigned int'. Las reglas se pueden encontrar aquí: https://www.securecoding.cert.org/confluence/display/seccode/INT02-C.+Understand+integer+conversion+rules – Mysticial