Нечетное смещение битов
У меня есть следующий код C, который работает:
int ex(unsigned int x) {
int mask = 0x55555555;
int a = ((x >> 0) & mask );
return a + ((x >> 1) & mask );
}
Однако, когда я расширяю его до этого, я получаю другой результат:
int ex(unsigned int x) {
int mask = 0x55555555;
int a = ((x >> 0) & mask );
int b = ((x >> 1) & mask );
return a + b;
}
В чем причина этой разницы?
EDIT:
Заметьте, я компилирую это для 32bit.
Ответы
Ответ 1
В чем причина этой разницы?
Фрагмент 1 st возвращает результат добавления двух unsigned
, при этом результат (неявно) преобразуется в int
.
Фрагмент 2 nd возвращает результат добавления двух int
.
Подробнее о "Обычные арифметические преобразования":