给定两个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和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     }

 

转载于:https://www.cnblogs.com/luoweiKnowledge/p/3960741.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值