文档章节

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

一贱书生
 一贱书生
发布于 2016/11/18 15:06
字数 636
阅读 3
收藏 0
点赞 0
评论 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
博文 723
码字总数 600072
作品 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
Bloom Filter 算法简介 (增加 Counting Bloom Filter 内容)

Bloom Filter的中文翻译叫做布隆过滤器,是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率...

kiwivip
2013/05/26
0
6
C++里string类字符串输入的用法

学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行) 1、cin 2、cin.get...

qq_39091609
2017/08/03
0
0
字符串的乘积 Multiply Strings

问题: Given two non-negative integers and represented as strings, return the product of and . Note: The length of both and is < 110. Both and contains only digits . Both and do......

叶枫啦啦
2017/09/04
0
0
给定一个正整数,找出与其二进制表示中1的个数相同,且大小最接近的那两个数

/** * 功能:给定一个正整数,找出与其二进制表示中1的个数相同,且大小最接近的那两个数。 * (一个略大一个略小。) / 三种方法: 方法一:蛮力法 方法二:位操作法 [java] view plain co...

一贱书生
2016/11/19
3
0
KMP字符串匹配算法

KMP算法,Knuth-Morris-Pratt Algorithm,一种由Knuth(D.E.Knuth)、Morris(J.H.Morris)和Pratt(V.R.Pratt)三人提出的一种快速模式匹配算法。 KMP朴素算法 原理:子串pattern依次与目标串tar...

长平狐
2013/01/06
167
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储

存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储 存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储。 顺序结构和链接结构适用在内存结构中。 顺序表每个单元都是按物理...

DannyCoder
13分钟前
0
0
Firefox 61已经为Ubuntu 提供支持

最新和最好的Mozilla Firefox 61 “Quantum”网络浏览器已经为Ubuntu Linux操作系统的用户提供了支持,现在可以通过官方软件库进行更新。 Mozilla于2018年6月26日发布了Firefox 61版本,该版...

六库科技
39分钟前
0
0
Win10升级后执行系统封装(Sysprep)报错

开始封装 一年多以前开始给公司封装Win10系统,便于统一给公司电脑初始化携带各种软件的系统,致力于装完既可以开发的状态。那时候最新的版本是Win10 1703版本,自然就以他为母盘,然后结合V...

lyunweb
59分钟前
38
0
php 性能优化

#什么情况下会遇到性能问题 PHP 语法使用的不恰当

to_be_better
今天
0
0
Jenkins 构建触发器操作详解

前言 跑自动化用例每次用手工点击jenkins出发自动化用例太麻烦了,我们希望能每天固定时间跑,这样就不用管了,坐等收测试报告结果就行。 一、定时构建语法 * * * * * (五颗星,中间用空格隔...

覃光林
今天
0
0
IDEA配置技巧

超详细设置Idea类注释模板和方法注释模板 idea去掉注解param下划线 JetBrains全系列破解

AK灬
今天
0
0
rsync通过服务同步/Linux系统日志/screen工具

rsync通过服务同步 分为服务端(机器A) 和客户端(机器B) 机器A操作编辑/etc/rsyncd.conf配置文件 [root@yolks1 ~]# vim /etc/rsyncd.conf 文件中添加以下配置 port=873 ...

Hi_Yolks
今天
0
0
分发系统介绍expect脚本远程登录expect脚本远程执行命令 expect脚本传递参数

分发系统介绍 分发系统-expect讲解(也就是一个分发的脚本) 场景: 业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者lnmp,最好还需要吧代码上传到服务器上;但是因为业...

lyy549745
今天
0
0
android studio 中设置创建类时的说明信息(包含 作者 ,创建时间,注释说明等)

今天简单来说一下android studio开发工具中的 一个小设置功能; 在开发过程中我们习惯给新建的类添加一些注释信息,创建日期、时间和作者等。 设置信息 File—>Settings—>Editor—>File and...

切切歆语
今天
0
0
开源监控利器Prometheus初探

前言: Kubernetes作为当下最炙手可热的容器管理平台,在给应用部署运维带来便捷的同时,也给应用及性能监控带来了新的挑战。本文给大家分享一款十分火热的开源监控工具Prometheus,让我们一...

寰宇01
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部