A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wangshengjie 中级黑马   /  2015-3-12 09:12  /  697 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
        循环位移。要求将a进行右循环位移。将a右循环移n位,即将a中原来左面(16-n)位右移n位,
        原来右端n位移到最左面n位。
*/

#include<stdio.h>


void main()
{

        unsigned BitOperation(unsigned x, int n);

        unsigned y, z;
        int m;
        scanf("y=%o,m=%d", &y, &m);

        z = BitOperation(y, m);

        printf("八进制y=%o,十进制y=%d\n", y, y);
        printf("八进制z=%o,十进制z=%d\n", z, z);
}

unsigned BitOperation(unsigned x,int n)
{

        unsigned a, b, c, d, e;

        a = ~(~0 << n);
        b = x&a;
        c = x >> n;
        d = b << (16-n);
        e = c | d;

        /*
                //错误,与计算机系统有关,a右移n位,高位不是补0
                unsigned a, b, c;

                a = x >> n;
                b = x << (16 - n);
                c = a | b;
        */

        return e;
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马