黑马程序员技术交流社区

标题: 编写一个移位函数,使移位函数既能循环左移又能循环右... [打印本页]

作者: zhaofeizlj    时间: 2015-7-20 22:07
标题: 编写一个移位函数,使移位函数既能循环左移又能循环右...

/*  编写一个移位函数,使移位函数既能循环左移又能循环右移。参数n大于0时便是左移,参数n小于0时便是右移    解释:循环右移:把右边移出的位放到左边移入的位
如: 1101 0101 1100 循环左移四位  0101 1100 1101         循环左移:把左边移出的位放到右边移入的位
思路:要得到
实现循环左移
左移4位   <<
0110 0000 0000 0000 0000 0000 0000 1111
1)  0000 0000 0000 0000 0000 0000 1111 0000
右移28位  >>
0110 0000 0000 0000 0000 0000 0000 1111
2) 0000 0000 0000 0000 0000 0000 0000 0110

0000 0000 0000 0000 0000 0000 1111 0000
^
0000 0000 0000 0000 0000 0000 0000 0110
------------------------------------------------------
0000 0000 0000 0000 0000 0000 1111 0110   (异或:相同为0  不同为1)

实现循环右移

右移4位:
0110 0000 0000 0000 0000 0000 0000 1111
0000 0110 0000 0000 0000 0000 0000 0000 1111
左移28位:
0110 0000 0000 0000 0000 0000 0000 1111
1111 0000 0000 0000 0000 0000 0000 0000


0000 0110 0000 0000 0000 0000 0000 0000
^  1111 0000 0000 0000 0000 0000 0000 0000
-----------------------------------------------
1111 0110 0000 0000 0000 0000 0000 0000


*/

#include <stdio.h>
int xuanHuanzouYi(int n, int number);
int xuanHuanYouYi(int n, int number);

int main(int argc, const char * argv[]) {
    int n;//需要移动的位数
    int number;//需要进行左右移的数

    printf("请输入需要进行左右移的数number");
    scanf("%d", &number);

    printf("请输入需要移动的位数n的值:");
    scanf("%d", &n);

    if (n>0) {
        int result = xuanHuanzouYi(n, number);
        printf("%d\n", result);
    }
    if (n<0) {
        int result = xuanHuanYouYi(n, number);
        printf("%d\n", result);
    }


    return 0;
}

int xuanHuanzouYi(int n, int number)//循环左移函数
{
    int zuoYi, youYi;

    zuoYi = number << n;
    youYi = number >>(32-n);

    int result = zuoYi ^ youYi;

    return result;
}

int xuanHuanYouYi(int n, int number)//循环右移函数
{
    int zuoYi, youYi;

    youYi = number >> n;
    zuoYi = number << (32-n);

    int result = youYi ^ zuoYi;

    return result;
}



作者: 哒哒萌    时间: 2015-7-20 22:29
这个题今天真是没有搞懂
作者: 手残程序员    时间: 2015-7-20 22:29

看过之后很有帮助




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2