, так что у меня проблема с "построением нового номера путем изменения его клевов". Вот как выглядит упражнение: Напишите функцию, которая имеет значение unsigned na) и возвращает значение с полубайтами, расположенными в обратном порядке
Я думал, что все 8 полубайтов из 32-битного unsigned должны быть помещены вобратный порядок. Итак, в качестве примера для числа 24, которое равно 00000000000000000000000000011000. => Обратное должно быть: 10000001000000000000000000000000.
#include <stdio.h>
unsigned getNibble(unsigned n,unsigned p){
unsigned mask = 0xFu;
unsigned nibble = 0;
nibble = (n&(mask<<p))>>p;
return nibble;
}
unsigned swapNibbles(unsigned n){
unsigned new = 0;
unsigned nibble;
for(unsigned i=0;i<(sizeof(n)*8);i=i+4){
nibble = getNibble(n,i);
new = (new<<i) + nibble;
}
return new;
}
int main(void) {
printf("0x%x",swapNibbles(24));
return 0;
}
Я попытался отладить его, и он шел хорошо до одной точки. При одном из правильных сдвигов он преобразовал мою «новую» переменную в 0.