二进制枚举法 位运算

偶尔善良 提交于 2019-11-30 17:00:37

首先需要知道位运算的基本操作:

a<<i 表示a进行了i次乘2,即a的二进制数向后加了i个0
1<<3==1*2*2*2==2^3==8  ==> (1000) 2==(8) 1011<<1 ==22 ==> (11010)2==(22)10a>>i 表示a进行了i次除2,即a的二进制数向右移了i位11>>1 == 11/2==5 ==(101)2==(5)10

二进制枚举(1)

int a=11;
for(int i=0;i<4;i++)
printf("%d",a>>i&1);   //数与1进行与操作,每次得到数末尾是1/0 1011        101        10         1&   1       &  1      &  1       & 1—————— ==》  ———— ==》 ————  ==》  ———— 0001        001        01          1得到的是1,1,0,1 即a二进制数的每个数,顺序相反,可以将其存入数组中 

二进制枚举(2)

int n;
for(int i=0;i<(1<<n);i++)   //枚举2^n -1 种情况
    printf("%d",i);

 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!