yo soy muy nuevo para tratar con los bits y que se ha pegado en la siguiente advertencia al compilar:advertencia: a la izquierda valor de desplazamiento> = anchura del tipo
7: warning: left shift count >= width of type
Mi línea 7 se parece a esto
unsigned long int x = 1 << 32;
Esto tendría sentido si el tamaño de long
en mi sistema era de 32 bits. Sin embargo, sizeof(long)
devuelve 8
y CHAR_BIT
se define como 8
sugiriendo que largo debe ser 8x8 = 64 bits de largo.
¿Qué me falta aquí? ¿Son sizeof
y CHAR_BIT
inexactos o he entendido mal algo fundamental?
Would 'sin signo de largo x = 1; x << = 32; 'trabajo, ¿por interés? –
@Kolink: Sí, eso tendría el mismo efecto, como '' (sin signo largo) 1 << 32' El operando izquierdo solo tiene que ser un 'unsigned long'. El sufijo 'UL' es simplemente la forma más directa de lograr eso. –
@James McNellis: ¿Cuáles son los * problemas de __left__ cambiando un número entero con signo *? Solo sé que *** *** *** cambiando un entero con signo puede llevar a resultados diferentes con diferentes compiladores. – pynexj