分类: 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);
具体用于细节的地方就不讨论了。