Nel codice seguente:promozione tipo di dati in 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);
}
mi aspettavo "promosso' da stampare ma doesnt Perché Se posso i tipi di dati a int firmato e non firmato, e hanno un come..? un numero negativo, ad esempio, 0x80000000 e b come un numero positivo, 0x01, "promosso" viene stampato come previsto.
PLZ aiutarmi a capire qual è il problema!
@Mystical Non capisco la tua risposta. Anche se viene firmato esteso per digitare int, quale non penso che faccia, ma supponendo che lo faccia, perché non viene promosso a unsigned int, e il prodotto è un numero + ve? – Dom045
+1 - Questa risposta è molto migliore/più rilevante della mia per un lungo miglio (quindi l'ho cancellata) –
@ Dom045 Perché la specifica lo dice. Sia 'signed char' che' unsigned char' sono tipi inferiori a 'int'. Quindi saranno entrambi promossi a 'int'. Nel caso 'signed int' vs.' unsigned int', lo standard impone che entrambi vengano convertiti in 'unsigned int'. Le regole possono essere trovate qui: https://www.securecoding.cert.org/confluence/display/seccode/INT02-C.+Understand+integer+conversion+rules – Mysticial