位运算系列

读入一个10进制正整数,将其二进制向右进行循环移位,并输出移位后的结果。

#include 
int main()
{
    unsigned int a,b;
    int i,n;
    scanf("%u%d",&a,&n);
    for(i=1;i<=n;i++)
    {
        b=a & 1;//取最后一位
        a=a>>1; //右移,舍掉最后一位
        if(b==1) //如果最后一位为1
            a=a | 0x80000000;//则把a的最前面一位变成1,从而实现循环移位
    }
    printf("%u\n",a);
    return 0;
}
#include 
int main()
{
    unsigned int a,n,i;
    scanf("%u %u",&a,&n);
    while(n--)
    {
        i=a%2;//把a当作二进制,所以对2取模看看末位是否为1
        a/=2;//把a右移1位,空出首位
        if(i==1)//原数末位为1
        {
            a|=0x80000000;//和1000 0000 0000 0000 0000 0000 0000 0000按位或操作,可把之前末位的1写到新数的首位而其他位不变
        }
    }
    printf("%u\n",a);
    return 0;
}



你可能感兴趣的:(算法,位运算,编码技巧)