我正在做那个练习
写一个函数rightrot(x,n),它返回由n位位置向右旋转的整数x的值.
但是当我尝试运行它时,我得不到我所期望的.
#include"stdio.h"
int most_signficant_bit(unsigned x){
int bitpos;
for(bitpos = -1; x!=0;++bitpos){
x=x>>1;
}
return bitpos;
}
unsigned rightrot(unsigned x, unsigned n){
int bitpos;
bitpos = most_signficant_bit(x);
x = ((x>>n)|(((~(~0<<n))&x)<<(bitpos-n)));
return x;
}
int main(int argc, char const *argv[]) {
unsigned int c1;
c1 = 0xff1;
printf("bitfield %x "
" after rightrot %x \n",c1, rightrot(c1, 4) );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道(x>>n)将位域'n'向右移动0000 1111 1111以从该空间复制'n'个较低有效位.
(~(~0<<n))&x)复制n个较低有效位(1111 1111 0001&0000 0000 1111= 0000 0000 …
c ×1