c implicit-conversion integer-promotion

Comportamiento de cambio de bit impar



implicit-conversion integer-promotion (1)

¿Cuál es la razón de esta diferencia?

El primer fragmento de código devuelve el resultado de agregar dos s unsigned con el resultado convertido (implícitamente) en un int .

El segundo fragmento de código devuelve el resultado de agregar dos int s.

Más sobre " Las conversiones aritméticas habituales ":

  • Conversiones aritméticas habituales en C: ¿Cuál es la razón detrás de esta regla en particular?
  • C conversiones aritméticas habituales
  • Conversión de tipo entero implícita en C

Tengo el siguiente código C que funciona:

int ex(unsigned int x) { int mask = 0x55555555; int a = ((x >> 0) & mask ); return a + ((x >> 1) & mask ); }

Sin embargo, cuando lo amplío a esto, obtengo un resultado diferente:

int ex(unsigned int x) { int mask = 0x55555555; int a = ((x >> 0) & mask ); int b = ((x >> 1) & mask ); return a + b; }

¿Cuál es la razón de esta diferencia?

EDIT: Nota, estoy compilando esto para 32 bits.