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

常见位操作:获取,设置,清零

时间:2014-09-07 21:05:15      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   ar   div   sp   log   c   amp   

 1 /*常见位操作:获取,设置,清零
 2  * 
 3  * */
 4 public class BitGet {
 5     /*
 6      * 该函数实现获取功能
 7      * 先将1左移动i位,左移动0位变成了00000001,
 8      * 然后再和Num十进制12转化为二进制00001100进行&运算,
 9      * 00000001   如果是左移动两位就为  00000100
10      * 00001100                    00001100
11      * --------                    --------
12      * 00000000                    00000100
13      * 从而将第i位除外的所有位清零,最后,检查该结果是不是为零
14      * 不为零则说明第i位为1,否则就是零
15      * */
16     public boolean getBit(int num,int i)
17     {
18         return ((num&(1<<i))!=0);
19     }
20     /*该函数实现置位功能
21      * 先将1左移动i位,得到形如00001000的值,接着,对这个值和Num进行位或运算
22      * 这样只会改变第i位的值,不会影响Num其他位
23      * 如下
24      * 12的二进制码为00001100
25      * 如果把第1个位进行置位得到
26      * 00001100
27      * 00000010
28      * --------
29      * 00001110
30      * 就是把第二位置为1,其他的都不变
31      * */
32     public int setBit(int num,int i)
33     {
34         return num|(1<<i);
35     }
36     /*
37      * 该函数实现清零功能
38      * 该方法与setBit刚好相反,首先,将1向左移动i位,然后对这个值取反得到其掩码
39      * 接着,对该掩码和Num执行位与运算,这样只会清零num的i位,其余位则保持不变
40      * 如下
41      * 12的二进制为00001100
42      * 假设要清零第3位 则有
43      * 1.将1向左移动3位得 00001000
44      * 2.取反 得11110111
45      * 3.进行位与运算
46      * 11110111
47      * 00001100
48      * --------
49      * 00000100
50      * 可以得出只是对第三位清零,其他保持不变
51      * */
52     public int clearBit(int num,int i)
53     {
54         int mask=~(1<<i);
55         return num &mask;
56     }
57     public static void main(String[] args) {
58         // TODO Auto-generated method stub
59         BitGet bg = new BitGet();
60         boolean flag=bg.getBit(12, 3);
61         System.out.println(flag);
62         int value = bg.setBit(12, 1);
63         System.out.println("置位第1位为:"+value);
64         value=bg.clearBit(12, 3);
65         System.out.println("清零第3位为:"+value);
66         
67     }
68 
69 }

 

常见位操作:获取,设置,清零

标签:style   blog   color   ar   div   sp   log   c   amp   

原文地址:http://www.cnblogs.com/luoweiKnowledge/p/3960715.html

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