因此,我遇到了一个有关“通过逆转其位数来建立新数字”的问题。 练习看起来像这样:写一个给定 无符号n 一种) 退货 值以半字节相反的顺序排列
我当时认为32位无符号的所有8个半字节应该以相反的顺序放置。因此,以数字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;
}
我尝试调试它,直到进行到1点为止,它运行良好。 在向右移动的其中之一处,它将我的“新”变量转换为0。