题意:

给定两个32位的整数 N 和 M,以及表示比特位置的 i 与 j 。编写一个方法,将 M 插入 N,使得 M 从 N 的第 j 位开始,到第 i 位结束。假定从 j 位到 i 位足以容纳M。

输入:N = 10000101000,M = 10011,i = 2, j = 6

输出:N = 10001001100

解题思路 :

   根据题意,我们将问题解决分为三个步骤:

  (1)将 N 中从 j 到 i 之间的位清零;

  (2)对 M 进行移位操作,M << i

  (3)合并 M 与 N 。

  为了完成步骤1,我们可以使用掩码来清零,除j到i之间的位为0外,这个掩码其余位为1。例如本题中,i = 2,j = 6,则掩码为11110000011。

具体代码如下:

public int updateBits(int n,int m,int i,int j) {
/*
*创建掩码,用来除 n中 i到 j的位
*本题中,i = 2,j = 6,则掩码为11110000011
*/
int allOnes = ~; //一连串的 1 //在位置 j 之前的位均为1,其余为0,则 left = 11110000000
int left = allOnes << (j + ); //在位置 i 之后的位均为1,其余为0,则right = 00000000011
int right = (( << i) - ); //除 i 到 j的位为 0,其余为1 则mask = 11110000011
int mask = left | right; int n_cleared = n & mask; //清楚n中j到i的位
int m_shifted = m << i; //将M移至相应的位置 return n_cleared | m_shifted; //对两者进行位或操作
}

Single Number II ——位操作的更多相关文章

  1. 【题解】【位操作】【Leetcode】Single Number II

    Given an array of integers, every element appears three times except for one. Find that single one. ...

  2. Leetcode 137 Single Number II 仅出现一次的数字

    原题地址https://leetcode.com/problems/single-number-ii/ 题目描述Given an array of integers, every element ap ...

  3. 【LeetCode】137. Single Number II (3 solutions)

    Single Number II Given an array of integers, every element appears threetimes except for one. Find t ...

  4. Single Number II(LintCode)

    Single Number II Given 3*n + 1 numbers, every numbers occurs triple times except one, find it. Examp ...

  5. 【leetcode】Single Number && Single Number II(ORZ 位运算)

    题目描述: Single Number Given an array of integers, every element appears twice except for one. Find tha ...

  6. [OJ] Single Number II

    LintCode 83. Single Number II (Medium) LeetCode 137. Single Number II (Medium) 以下算法的复杂度都是: 时间复杂度: O( ...

  7. Single Number,Single Number II

    Single Number Total Accepted: 103745 Total Submissions: 218647 Difficulty: Medium Given an array of ...

  8. leetcode 之 Single Number II

    问题来源:Single Number II 问题描述:给定一个整数数组,除了一个整数出现一次之外,其余的每一个整数均出现三次,请找出这个出现一次的整数. 大家可能很熟悉另一个题目(Single Num ...

  9. 【leetcode78】Single Number II

    题目描述: 给定一个数组,里面除了一个数字,其他的都出现三次.求出这个数字 原文描述: Given an array of integers, every element appears three ...

随机推荐

  1. java转义字符探究恢复

    今天工作的时候,遇到了个奇怪的问题,是关于字符串转义与替换的.最后终于解决了,特总结下. 小demo, package com.westward; public class Demo { /** * ...

  2. 小记:使用SharedPreferences存储来设置程序第一次进入欢迎界面,以后不会再进入欢迎界面。

    SharedPreferences mSharedPreferences = this.getSharedPreferences(NAME, this.MODE_PRIVATE); boolean f ...

  3. C#启动一个外部程序(1)-WinExec

    C#启动一个外部程序(1)-WinExec 调用Win32 API.1. using System.Runtime.InteropServices; 2. //        //#define SW ...

  4. 如何判断Intent有没有对应的Activity去处理?

    如何判断Intent有没有对应的Activity去处理?至少有以下两种方法,最近使用过,随笔记下来,以供查阅. 第一种, 如下: public boolean isIntentResolvable(I ...

  5. CodeForces 546B-Soldier and Badges

    题意: 给出一些数字,要求每个数字都不一样需要增加几 思路: 先排序,然后一个个增加,最后求总和差 代码如下: #include <iostream> #include <cstdi ...

  6. 开始接触BT5-自动登录X界面

    第一种,直接登录root用户的图形界面,不用输入密码 1,安装rungetty 1 # apt-get install rungetty 2,编辑/etc/init/tty1.conf root@bt ...

  7. 如何使用SVN管理我们的源代码

    今天把公司的SVN服务器配置给做了一下,根据公司部门的不同,划分了不同的访问目录,并给不同目录配置了相应的权限,算是把这份差事给干完了,但其实我对自己的工作是不满意和有遗憾的,因为目前公司的SVN服务 ...

  8. javascript插件uploadify简单实现文件上传

    最近在学习mvc,需要用到文件上传的功能,找了很多的jquery插件,最后决定使用uploadify这个插件,参照了各位大神的博客,终于勉勉强强会用了.在此,做一下笔记,方便以后忘了查看. 首先在官网 ...

  9. 转:gartner 2014-07 ETL工具象限排名

    ref:  http://www.gartner.com/technology/reprints.do?id=1-1YAXV15&ct=140728&st=sb

  10. <转>用thinkPHP实现验证码的功能

    许多系统的登录都有验证码,而如果使用thinkPHP框架搭建网站的话,验证码的生成和验证就比较容易了 1.生成验证码 thinkPHP有对应生成验证码的方法 要使用验证码,需要导入扩展类库中的ORG. ...