| 1 | |
| 2 | #include <bitset> |
| 3 | #include <iostream> |
| 4 | #include <string> |
| 5 | #include <limits> |
| 6 | |
| 7 | using namespace std; |
| 8 | |
| 9 | int main(int argc, char* argv[]) |
| 10 | { |
| 11 | cout<<"==移位操作===================="<<endl; |
| 12 | //左移/右移n位将所有位向左/右移动n位,腾出来的位置补零,超出边界的位置被丢弃。相当于乘以/除以2的n次方。 |
| 13 | int x=20; |
| 14 | int y=x<<3; |
| 15 | cout<<y<<endl; |
| 16 | cout<<hex<<y<<endl; |
| 17 | y=y>>3; |
| 18 | cout<<y<<endl; |
| 19 | y=y>>3; |
| 20 | cout<<y<<endl<<endl; |
| 21 | //打开指定位(将指定位设置为1):将该数的第n位于1或。 |
| 22 | //通过移位运算符来构造掩码,将1左移n-1位,然后于该数或。 |
| 23 | cout<<"==1:将指定位设置为1===================="<<endl; |
| 24 | int lottabits= 5,bit=16,xbit,c,j,k=4; |
| 25 | xbit = (~bit); |
| 26 | c=lottabits|bit; |
| 27 | j=lottabits; |
| 28 | j|= 1<<k; |
| 29 | bitset<32> bita(lottabits); |
| 30 | bitset<32> bitb(bit); |
| 31 | bitset<32> bitc(c); |
| 32 | bitset<32> bitd(j); |
| 33 | bitset<32> bitx(xbit); |
| 34 | |
| 35 | cout <<"5 bits is: "<<bita<<endl<<"16 bits is: "<<bitb<<endl<<"5|16 is: "<<bitc<<endl; |
| 36 | cout <<"5|=1<<4 is: "<<bitd<<endl<<endl; |
| 37 | //切换指定位(将原来的0置为1,原来的1置为0):将该数的指定位于1异或。 |
| 38 | // |
| 39 | cout<<"==2:切换指定位===================="<<endl; |
| 40 | c=lottabits^bit; |
| 41 | bitset<32> bitm(c); |
| 42 | cout <<"5 bits is: "<<bita<<endl<<"15 bits is: "<<bitb<<endl<<"5|15 is: "<<bitm<<endl<<endl; |
| 43 | |
| 44 | //关闭指定位(将指定位设置为0):将该数的指定位(第n位)于0于。 |
| 45 | //通过移位构造掩码,将1左移n-1位,然后取反 再于该数相与。 |
| 46 | cout<<"==3:关闭指定位===================="<<endl; |
| 47 | int i=4; |
| 48 | i=(~i); |
| 49 | c=lottabits&i; |
| 50 | j=lottabits; |
| 51 | j &= ~(1<<2); |
| 52 | bitset<32> bith(c); |
| 53 | bitset<32> bitj(j); |
| 54 | bitset<32> biti(i); |
| 55 | cout <<"5 bits is: "<<bita<<endl<<"~4 bits is: "<<biti<<endl<<"5 &(~15) is: "<<bith<<endl; |
| 56 | cout <<"5&(~(1<<2)): "<<bitj<<endl<<endl; |
| 57 | |
| 58 | //测试指定位(确定将指定位中对应位是否为1):将该数的指定位于1于操作,返回值不变。即lottabits&bit ==bit或 if(lottabits&bit)。 |
| 59 | //if(lottabits&1<<n-1) |
| 60 | cout<<"==4:测试指定位===================="<<endl; |
| 61 | c=lottabits&bit; |
| 62 | bitset<32> bitf(c); |
| 63 | cout <<"5 bits is: "<<bita<<endl<<"~15 bits is: "<<bitb<<endl<<"5 &(~15) is: "<<bitf<<endl<<endl; |
| 64 | cout<<"======================"<<endl; |
| 65 | } |
浙公网安备 33010602011771号