首页 > 代码库 > 给定两个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位结束
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。