码迷,mamicode.com
首页 > 其他好文 > 详细

【屯】位运算技巧

时间:2018-03-31 20:36:29      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:set   进制   左移   反转   个数   else   gpo   post   int   

 1 int getbit(int c,int i)//获取c这个数字第i位的bit是什么 
 2 {
 3     return ((c>>(i-1))&1);//将c右移i-1位,则第i-1位到了末尾。与1相与,返回得到的结果。 
 4 }
 5 void setbit(int &c,int i,int v)//修改c的第i位的bit值 v传入1或0,传入1则将数字c的第i位置成1 
 6 {
 7     if(v)//0置为1 
 8     {
 9         c|=(1<<i);
10     }
11     else//1置为0 
12     {
13         c&=!(1<<i);
14     }
15     
16     return ;
17 }
18 void flipbit(int &c,int i)//反转数字c的二进制数的某一位
19 {
20     c^=(1<<i);
21 } 

比如二进制数0010,需要将第4位的0变成1,将1左移4位,得到1000
00001000
|00000010
__________
00001010

比如二进制数1010,需要将第2位的1变成0,将1左移2位,得到0010
0010取反得到1101

1101
&1010
______
1000

-------------------------------

二进制数字1100,反转第三位,1左移3位得到0100
0100
^1100
______
1000

反转第二位
0010
^1100
______
1110

【屯】位运算技巧

标签:set   进制   左移   反转   个数   else   gpo   post   int   

原文地址:https://www.cnblogs.com/Decimus/p/8683758.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!