Nous avons trouvé des valeurs étranges en cours de production, un petit cas de test est ci-dessous. Ceci imprime "FFFFFFFFF9A64C2A". Ce qui signifie que le long signe non signé semble avoir été prolongé. Mais pourquoi? Tous les types ci-dessous ne sont pas signés, alors que fait l'extension de signe? La sortie attendue serait "F9A64C2A".Extension de signe avec unsigned long long
#include <stdio.h>
int main(int argc,char *argv[])
{
unsigned char a[] = {42,76,166,249};
unsigned long long ts;
ts = a[0] | a[1] << 8U | a[2] << 16U | a[3] << 24U;
printf("%llX\n",ts);
return 0;
}
Correction mineure: 'a [1]' a le type 'unsigned char'. –
@ user964970: relire. Le type de 'x << y' n'a rien à voir avec le type de' y'. –
@Dietrich Epp: Merci. –