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

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

 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和N13      * */14     public int updateBits(int n,int m,int i,int j)15     {16         int allOnes=~0;//创建一连串1 假如为1111111117         int left=allOnes<<(j+1);  //在位置j之前的位均值为1,其余为0,此刻为1110000018         int right=((allOnes<<i)-1);//在位置i之后的位均置位1,此刻为0000001119         int mask=left | right; //进行位或运算之后得到 1110001120         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 stub27         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位结束