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

给定两个32位的整数N和M,以及表示比特位置的i和j。编写一个方法,将M插入到N中, * 使得M从N的第j位开始,到第i位结束

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

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

 1 /*
 2      * 给定两个32位的整数N和M,以及表示比特位置的i和j。编写一个方法,将M插入到N中,
 3      * 使得M从N的第j位开始,到第i位结束,假定从j位到i位足以容纳M,也即是M=10011
 4      * 那么j和i之间至少可以容纳5个数,假如,不可能出现j=3,i=2的情况,因为第三位和第二位之间放不下M
 5      * 例如
 6      * N=1000000000(1024)
 7      * M=10011(19)
 8      * i=2,j=6,输出10001001100
 9      * 思路如下:
10      * 1.将N中的从j到i之间清零
11      * 2.对M执行移位操作与j和i之间的位对其
12      * 3.合并M和N
13      * */
14     public int updateBits(int n,int m,int i,int j)
15     {
16         int allOnes=~0;//创建一连串1 假如为11111111
17         int left=allOnes<<(j+1);  //在位置j之前的位均值为1,其余为0,此刻为11100000
18         int right=((allOnes<<i)-1);//在位置i之后的位均置位1,此刻为00000011
19         int mask=left | right; //进行位或运算之后得到 11100011
20         int n_cleared=n& mask;  //清除位置j到i的位,然后将M放进去
21         int m_shifted=m<<i;    //将M移动到相应的位置
22         return n_cleared | m_shifted;  //对两者进行位或操作
23         
24     }
25 public static void main(String[] args) {
26         // TODO Auto-generated method stub
27         BitGet bg = new BitGet();
28         int num=bg.updateBits(1024, 19, 2, 6);
29         System.out.println(Integer.toBinaryString(num));
30         
31     }

 

给定两个32位的整数N和M,以及表示比特位置的i和j。编写一个方法,将M插入到N中, * 使得M从N的第j位开始,到第i位结束

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

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

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