Encontramos que se producen algunos valores extraños, a continuación se muestra un pequeño caso de prueba. Esto imprime "FFFFFFFFF9A64C2A". Lo que significa que el largo sin signo parece haber sido extendido. ¿Pero por qué? Todos los tipos a continuación no tienen firma, entonces, ¿qué está haciendo la extensión de señal? La salida esperada sería "F9A64C2A".Extensión de signo con largo largo sin signo
#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;
}
Corrección secundaria: 'a [1]' tiene tipo 'char sin signo'. –
@ user964970: leer nuevamente. El tipo de 'x << y' no tiene nada que ver con el tipo de' y'. –
@Dietrich Epp: Gracias. –