</pre><pre code_snippet_id="1683618" snippet_file_name="blog_20160514_1_2802433" name="code" class="cpp"><pre name="code" class="cpp">#include <bitset>
#include <iostream>
#include <string>
#include <limits>
using namespace std;
int main(int argc, char* argv[])
{
cout<<"==移位操作===================="<<endl;
//左移/右移n位将所有位向左/右移动n位,腾出来的位置补零,超出边界的位置被丢弃。相当于乘以/除以2的n次方。
int x=20;
int y=x<<3;
cout<<y<<endl; /// 160
cout<<hex<<y<<endl; /// a0
///cout<<oct<<y<<endl; 八进制
y=y>>3;
cout<<y<<endl;/// 十进制是20 输出的是16进制 : 14
y=y>>3;
cout<<y<<endl<<endl; /// 2
//打开指定位(将指定位设置为1):将该数的第n位于1或。
//通过移位运算符来构造掩码,将1左移n-1位,然后于该数或。
cout<<"==1:将指定位设置为1===================="<<endl;
int lottabits= 5,bit=16,xbit,c,j,k=4;
cout << bit << endl;///居然输出 16 进制
cout << hex << bit << endl;
xbit = (~bit);/// bit取反
cout << xbit << endl;
cout << bit << endl;
cout << ~bit<< endl;
c=lottabits|bit;
j=lottabits;
j|= 1<<k;
bitset<32> bita(lottabits);
bitset<32> bitb(bit);
bitset<32> bitc(c);
bitset<32> bitd(j);
bitset<32> bitx(xbit);
cout <<"5 bits is: "<<bita<<endl<<"16 bits is: "<<bitb<<endl<<"5|16 is: "<<bitc<<endl;
cout <<"5|=1<<4 is: "<<bitd<<endl<<endl;
cout << bitx << endl;
//切换指定位(将原来的0置为1,原来的1置为0):将该数的指定位于1异或。
//
cout<<"==2:切换指定位===================="<<endl;
c=lottabits^bit;
bitset<32> bitm(c);
cout <<"5 bits is: "<<bita<<endl<<"15 bits is: "<<bitb<<endl<<"5|15 is: "<<bitm<<endl<<endl;
//关闭指定位(将指定位设置为0):将该数的指定位(第n位)于0于。
//通过移位构造掩码,将1左移n-1位,然后取反 再于该数相与。
cout<<"==3:关闭指定位===================="<<endl;
int i=4;
i=(~i);
c=lottabits&i;
j=lottabits;
j &= ~(1<<2);
bitset<32> bith(c);
bitset<32> bitj(j);
bitset<32> biti(i);
cout <<"5 bits is: "<<bita<<endl<<"~4 bits is: "<<biti<<endl<<"5 &(~15) is: "<<bith<<endl;
cout <<"5&(~(1<<2)): "<<bitj<<endl<<endl;
//测试指定位(确定将指定位中对应位是否为1):将该数的指定位于1于操作,返回值不变。即lottabits&bit ==bit或 if(lottabits&bit)。
//if(lottabits&1<<n-1)
cout<<"==4:测试指定位===================="<<endl;
c=lottabits&bit;
bitset<32> bitf(c);
cout <<"5 bits is: "<<bita<<endl<<"~15 bits is: "<<bitb<<endl<<"5 &(~15) is: "<<bitf<<endl<<endl;
cout<<"======================"<<endl;
}
有了下面的小程 就不难理解上面的输出了!!!
<pre name="code" class="cpp">#include<iostream>
using namespace std;
int main()
{
int a = 16;
int b = 32;
cout << a << endl;
cout << b << endl;
cout << hex << a << endl;
cout << b << endl;
cout << a << endl;
cout << dec << a << endl;
cout << a <<endl;
}
/*
16
10
10
16
16
Process returned 0 (0x0) execution time : 0.491 s
Press any key to continue.
*/