文档章节

M插入N,使得M从N的第j位开始,到第i位结束

一贱书生
 一贱书生
发布于 2016/11/18 15:06
字数 636
阅读 3
收藏 0

/**

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

 * 到第i位结束。假定从j为到i位足以容纳M,也即若M=10011,那么j和i之间至少可以容纳5个位。例如,不可能出现j=3

 * 和i=2的情况,因为第3位和第2位之间放不下M。

 */

 

x & (~0  << n):相当于把x最右边的n位清零

还有一些:(0s,1s表示一串0和一串1)

x ^ 0s = x

x ^ 1s = ~x

x ^ x = 0

 

x & 0s = 0

x & 1s = x

x & x = x

 

x | 0s = x

x | 1s = 1

x | x = x

常见的位操作:获取,设置, 清楚以及更新位数据

1. 获取某一位是1还是0:

将1左移i位,得到形如00001000的值,然后对这个值与num执行“位与”操作,从而将i位之外的的左右位清零,最后,检查该结果是否为0 ,为0,说明i位为0,否则说明i位为1

 

  1. boolean getBit(int num, int i) {  
  2.         return ( (num & ( 1 << i )) != 0);  
  3.     }  


2. 将第i位置为1,将1左移i位,得到形如00001000的值,接着对这个num执行“位或”操作,这样只会改变i位的数据,不会影响num的其余位

 

  1. boolean setBit(int num, int i) {  
  2.         return num | ( 1 << i );  
  3.     }  


3. 将第i位清零, 与setBit刚好相反, 将1左移i位,得到形如00001000的值,再取反,得到形如11110111的值,接着对这个num执行“位与”,这样只会清零i位,不会影响num的其余位

 

  1. boolean clearBit(int num, int i) {  
  2.         return num & ~( 1 << i );  
  3.     }  

 

 

 将num的最高位至第i位清零:

 

  1. boolean clearBitMSthrough(int num, int i) {  
  2.         int mask = ~( ( 1 << i ) - 1);  
  3. return num & mask;  
  4.  } 

将最右边的i位清零:

 

  1. boolean clearBitIthrough(int num, int i) {  
  2.         int mask = ~( ( 1 << ( i + 1 ) ) - 1 );  
  3.         return num & mask;  
  4.     }

代码实现:

注意:M和N的输入进制数

      [java] view plain copy

 

  1. public static void main(String[] args) {  
  2.     // TODO Auto-generated method stub    
  3.     String s1=Integer.toBinaryString(updateBits(1024, 19, 2, 6));  
  4.     System.out.println(s1);  
  5.       
  6.     String s2=Integer.toBinaryString(updateBits2(1024, 19, 2, 6));  
  7.     System.out.println(s2);  
  8. }  

 

两种方法:

方法一:

    [java] view plain copy

 

  1. public static int updateBits(int n,int m,int i,int j){        
  2.         int mask=~(1<<(j+1)-1);  
  3.         for(int k=i-1;k>=0;k--){  
  4.             mask+=1<<k;  
  5.         }  
  6.         int result=n&mask|(m<<i);  
  7.           
  8.         return result;    
  9.     }  

 

 

方法二: [java] view plain copy

 

  1. public static int updateBits2(int n,int m,int i,int j){  
  2.         int allOnes=~0;  
  3.         int left=allOnes<<(j+1);  
  4.         int right=(1<<i)-1;  
  5.           
  6.         int mask=left|right;  
  7.           
  8.         int n_cleared=n&mask;  
  9.         int m_shifted=m<<i;  
  10.           
  11.         return n_cleared|m_shifted;  
  12.     }

© 著作权归作者所有

共有 人打赏支持
一贱书生
粉丝 19
博文 724
码字总数 600123
作品 0
bzoj1070 [SCOI2007]修车

Description 同一时刻有 位车主带着他们的爱车来到了汽车维修中心。维修中心共有 位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的。现在需要安排这 位技术人员所维修的车及...

aziint
2017/12/16
0
0
菜鸡吃米之位运算小结

bit 位运算的题目特点是不容易想到但如果有做过类似题目的话则能够很快给出方法。属于是见过就会没见过很难想到的思路。 下面尝试给出常见的一些问题和思路并使用python来完成。(其实python不...

跑得比谁都慢
2017/11/13
0
0
Python 基础练习 PAT水题(四)

#学习笔记 #用以练习python基础 # 原题链接:https://www.patest.cn/contests/pat-b-practise/1050 1050. 螺旋矩阵(25) 本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“...

chaunceyjiang
2017/04/26
0
0
BZOJ1070 / SCOI2007 修车【网络流/费用流】

Description 同一时刻有 位车主带着他们的爱车来到了汽车维修中心。维修中心共有 位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的。现在需要安排这 位技术人员所维修的车及...

OwenOwl
2017/10/17
0
0
Counting Bloom Filter【ZZ】

Counting Bloom Filter 转载自:焦萌 2007年1月30日 【http://blog.csdn.net/jiaomeng】 从前面几篇对Bloom Filter的介绍可以看出,标准的Bloom Filter是一种很简单的数据结构,它只支持插入...

xtxb
2010/04/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Web系统大规模并发:电商秒杀与抢购

一、大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整个Web系统遇到了很多的问题和挑战。如果Web系统不做针对性的优化,会轻而易举地陷入到异常...

xtof
今天
1
0
代码质量管理平台-sonarqube

在工作中,往往开发的时候会不怎么注重代码质量的人很多,存在着很多的漏洞和隐患等问题,sonarqube可以进行代码质量的审核,而且十分的残酷。。。。。接下来我们说下怎么安装 进入官网下载:...

落叶清风
今天
6
0
在Ubuntu安装和配置Sphinx

Ubuntu系统默认是配置有sphinx的,先检查一下,别多此一举。。。。。 在开始本指南之前,您需要: 一个Ubuntu 16.04服务器。 sudo的一个非root用户,您可以通过以下设置本教程 。 安装在服务...

阿锋zxf
今天
1
0
Qt编写输入法V2018超级终结版

对于qt嵌入式linux开发人员来说,输入法一直是个鸡肋问题,要么不支持实体键盘同步,要么不能汉字输入,要么不支持网页输入等,这几年通过陆续接触大量的各种输入法应用场景客户,得到真实需...

飞扬青云
今天
2
0
TypeScript基础入门之高级类型的多态的 this类型

转发 TypeScript基础入门之高级类型的多态的 this类型 高级类型 多态的this类型 多态的this类型表示的是某个包含类或接口的子类型。 这被称做F-bounded多态性。 它能很容易的表现连贯接口间的...

durban
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部