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.