dwodao

关于左移和右移的口算:

a 左移 n 位就是 a 乘 2 的 n 次方

a 右移 n 位就是 a 除 2 的 n 次方
unsigned int a = 60;      // 60 = 0011 1100
c = a << 2;            // 240 = 1111 0000
cout << "Line 5 - c 的值是 " << c << endl ;
 
c = a >> 2;            // 15 = 0000 1111
cout << "Line 6 - c 的值是 " << c << endl ;<br>
c = a << 2;            // 240 = 1111 0000 // c = a* 2^2 = a*4 = 60*4
c = a >> 2;            // 15 = 0000 1111  // c = a/ 2^2 = a/4 = 60/4


c = a >> n;    // c = a * (2^n);
c = a << n;    // c = a / (2^n);

给出测试代码:

#include <iostream>
#include <math.h>
using namespace std;
int left(int a,int n);
int right(int a,int n);
int main()
{
    unsigned int a = 33;
    cout << "关于a左移和右移n位的口算方法" << endl;
    cout << "a << 2 =" << (a<<2) << endl;
    cout << "a << 2 =" << (left(a,2)) << endl;
    cout << "a >> 2 =" << (a>>2) << endl;
    cout << "a >> 2 =" << (right(a,2)) << endl;
    return 0;
}

int left(int a,int n){
    return a * pow(2,n);
}
int right(int a,int n){
    return a / pow(2,n);
}

运行结果:

关于a左移和右移n位的口算方法
a << 2 =132
a << 2 =132
a >> 2 =8
a >> 2 =8