博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Update Bits
阅读量:5124 次
发布时间:2019-06-13

本文共 1530 字,大约阅读时间需要 5 分钟。

Given two 32-bit numbers, N and M, and two bit positions, i and j. Write a method to set all bits between i and j in N equal to M (e g , M becomes a substring of N located at i and starting at j)

 Notice

In the function, the numbers N and M will given in decimal, you should also return a decimal number.

Clarification

You can assume that the bits j through i have enough space to fit all of M. That is, if M=10011, you can assume that there are at least 5 bits between jand i. You would not, for example, have j=3 and i=2, because M could not fully fit between bit 3 and bit 2.

Example

Given N=(10000000000)2M=(10101)2i=2j=6

return N=(10001010100)2

分析:http://www.kancloud.cn/kancloud/data-structure-and-algorithm-notes/72988

大致步骤如下:

  1. 得到第i位到第j位的比特位为0,而其他位均为1的掩码mask
  2. 使用mask与 N 进行按位与,清零 N 的第i位到第j位。
  3. 对 M 右移i位,将 M 放到 N 中指定的位置。
  4. 返回 N | M 按位或的结果。

获得掩码mask的过程可参考 CTCI 书中的方法,先获得掩码(1111...000...111)的左边部分,然后获得掩码的右半部分,最后左右按位或即为最终结果。

1 class Solution { 2 public: 3     /** 4      *@param n, m: Two integer 5      *@param i, j: Two bit positions 6      *return: An integer 7      */ 8     int updateBits(int n, int m, int i, int j) { 9         // write your code here10         int ones = ~0;11         int mask = 0;12         if (j < 31) {13             int left = ones << (j + 1);14             int right = ((1 << i) - 1);15             mask = left | right;16         } else {17             mask = (1 << i) - 1;18         }19 20         return (n & mask) | (m << i);21     }22 };

 

转载于:https://www.cnblogs.com/beiyeqingteng/p/5686916.html

你可能感兴趣的文章
LeetCode -- Merge K Sorted Lists
查看>>
C程序设计 贪吃蛇分析(2)
查看>>
IGMP简介
查看>>
1418:猴子选大王
查看>>
C#进阶系列——DDD领域驱动设计初探(二):仓储Repository(上)
查看>>
DataTable 转换成 Json的3种方法
查看>>
eclipse怎样在线安装hibernate tools插件并使用
查看>>
判断IE和360浏览器
查看>>
Vuejs 用$emit 与 $on 来进行兄弟组件之间的数据传输
查看>>
Kernel Knights (Gym - 101480K)
查看>>
MIPS 跳转指令BAL vs JAL
查看>>
最短路问题
查看>>
博客转移
查看>>
Shell入门教程:命令替换 $() 和 ``
查看>>
解决ThinkPHP3.2.3框架,PDO驱动类“抛出异常”不起作用的bug
查看>>
结对作业
查看>>
洛谷P2341 受欢迎的牛——Tarjan+缩点模板
查看>>
一些资源地址
查看>>
C++伪函数
查看>>
[教程]iOS 4 开发的好东西 (资料)url
查看>>