• 位运算->自定义函数之通用位移


    编写一个函数,实现左右循环移位。函数名为move,调用方法为move(value, n)。其中value为需要循环位移的数,n为位移的位数。n<0表示为左移;n>0表示为右移。例如,n=4表示右移4位;n=-3表示左移3位。

    位运算这么灵活强大,为什么用数组呢?

    #include <stdio.h>
    unsigned int move(unsigned int value,int n)
    {
        int i;
        unsigned int t;
        if(n>0)
        {
            for(i=0;i<n;i++)
            {
                t=value & 1;  //判断最后一位是否为1
                value=value>>1;   //右移舍去最后1位
                if(t==1) value=value | 0x80000000; //如果最后一位是为1,则把最前面一位设置为1
            }
        }
        else
        {
            n=-n;
            for(i=0;i<n;i++)
            {
                t=value & 0x80000000;//判断最前面一位是否为1
                value=value<<1; //左移舍去最后1位
                if(t==0x80000000) value=value | 1;//如果最前面一位是为1,则把最后一位设置为1
            }
       }
       return value; 
    }
    int main()
    {
        unsigned int a,b;
        int n;
        scanf("%u%d",&a,&n);
        b=move(a,n);
        printf("%u
    ",b);
        return 0;
    }
    
    
    
    
  • 相关阅读:
    hashmap的一些基础原理
    关于uuid
    读锁跟写锁的区别
    栈为什么效率比堆高
    MySQL行级锁、表级锁、页级锁详细介绍
    MYSQL MyISAM与InnoDB对比
    MYSQL锁表问题解决
    mysql查询锁表语句
    三种排序方法
    正则表达式
  • 原文地址:https://www.cnblogs.com/AmosAlbert/p/12832264.html
Copyright © 2020-2023  润新知