• 给定两个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     }
  • 相关阅读:
    图解SQL的Join(转)
    MySQ数据表设计
    关于数据库DML、DDL、DCL区别
    SQL多表连接查询
    Xcode报错Expected selector for Objective-C and Expected method body
    Mac上安装使用MYSQL以及Navicat数据库管理和PHP服务器配置
    更换app开发者账号
    Mac 下的 C++ 开发环境
    spring-retry 重试机制
    Ribbon的主要组件与工作流程
  • 原文地址:https://www.cnblogs.com/luoweiKnowledge/p/3960741.html
Copyright © 2020-2023  润新知