Chinaunix首页 | 论坛 | 博客
  • 博客访问: 305943
  • 博文数量: 84
  • 博客积分: 5016
  • 博客等级: 大校
  • 技术积分: 900
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-30 20:22
文章分类

全部博文(84)

文章存档

2008年(21)

2007年(63)

我的朋友

分类: C/C++

2007-01-09 15:10:45

 

    关于>>和<<运算符,是用来对变量在内存中的二进制值进行移位用的。

    左移i位,就相当于乘以2的i次方,如

    y=x<<4;

             就相当于  y=x*2*2*2*2;

    当然,x的值是不会变的。

 

    ……

    阿,太好了

    睡了一个午觉,终于想明白旋转移位的原理拉。

    原理很简单,360度的圆周等于旋转角度加上(360-旋转角度)——这样就容易理解了

    首先我们假设一个整型数据在内存中的二进制数据是

    12345678        ——我当然知道这绝不可能,再此只说明移位的问题,这样得看。

    如果我们想把它左旋3位,就要先左移3位,(右边的三位肯定会被补零)然后再把丢失的那3位补到右边的三个零位上。

    首先,左移3位:

           a<<3      //这时的二进制值会变成 45678000

    之后,要补的内容:

           a>>(sizeof(int)-3)

           //sizeof(int)当然就是整型值占的字节数(也就是刚刚所说的“360度”)

    合并,最终用于赋值的语句为:

           y=(a<<3)|(a>>sizeof(int)-3);

    具体用于细节的地方就不讨论了。

阅读(889) | 评论(3) | 转发(0) |
0

上一篇:异或手记

下一篇:预处理器

给主人留下些什么吧!~~