注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

C语言循环移位  

2011-03-08 21:06:51|  分类: C & C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    众所周知C语言中位运算的效率是相当高的,同时许多精彩绝妙的程序都是因为位运算而大放异彩,这天无聊把老谭的C语言程序设计有拿出来翻了翻,虽说这本书只适合初学者,靠这本书是没有什么长进的,不过这本书倒是说的很详细,连无聊的运算优先级都讲得头头是道,呃,扯远了,还是回到位运算上来吧,其实也没啥大不了的,只是很少使用感觉有点手生,温习了一遍之后就想拿后面的题目练练手,有道题是要求编写一个函数move实现循环左右移位,函数原型如下:

move(value,n)

    value是被操作数,n表示移位方向和大小,n<0表示左移位,n>0表示右移位,其绝对值表示移位的位数,例如move(147,-3)表示将147向左循环移位3位,而move(391,4)则表示将391向右循环移位4位

我的程序如下:

#include <stdio.h>

#include <stdlib.h>

 

void HexInt(int n)

//将输入的整数用二进制显示出来

//这里的整型假设占2个字节

{

       int i;

       for(i=15;i>=0;i--)

       {

        printf("%d",n>>i & 1);

              if(i%4==0) printf(" ");

       }

       printf("\n");

}

 

int SHR(int value)

//循环右移一位

{

       int x,y;

       x=value>>1;//value的左边15

       y=value & 0x0001;//获取value最右边一位

       y<<=15;

       if(value<0)//最左边为1,移位自动补1    

              x=x & 0x8fff;//最左边变为0

       x=x|y;

       return x; 

}

 

int SHL(int value)

//循环左移一位

{

       int x,y;

       x=value<<1;//获取value右边15

       y=(value>>15) & 0x0001;//获取value最左边一位

       printf("%d\n",y);

       x=x|y;

       return x;

}

int BitMove(int value,int n)

//value为需要循环移位的值

//n为移动方向和大小,负数表示左移位,正数表示右移位

{

       int i;

       if(n>0)//右移位

       {

              for(i=0;i<n;i++)

                     value=SHR(value);

       }

       else

       {

              n=-n;

              for(i=0;i<n;i++)

                     value=SHL(value);

       }

       return value;

}

 

int main(int argc, char *argv[])

{

       int n;

       printf("Input an Integer Number:\t");

       scanf("%d",&n);

       HexInt(n);

       HexInt(BitMove(n,2));

       system("PAUSE");

       return 0;

}

     没有完全按照书上的要求,事实上,题目要求的move函数这里使用BitMove代替了,感觉这个名字更酷,主要是反复调用下面的两个函数:单位循环移位函数SHR和SHL,分别是向右和左移动一位,另外还附赠显示整数在内存中的表示形式的函数HexInt,Dev Cpp调试通过,有图有真相:

C语言循环移位 - Castor - 趁年轻,多折腾~~

 

  评论这张
 
阅读(35808)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016