小编war*_*ior的帖子

2-8 K&R C运动有什么不对?

我正在做那个练习

写一个函数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

3
推荐指数
1
解决办法
100
查看次数

标签 统计

c ×1