程序员面试金典--面试25之将m的二进制数位插入到n的二进制的第j到第i位
2017-05-04 21:44
337 查看
题目描述
有两个32位整数n和m,请编写算法将m的二进制数位插入到n的二进制的第j到第i位,其中二进制的位数从低位数到高位且以0开始。给定两个数int n和int m,同时给定int j和int i,意义如题所述,请返回操作后的数,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1。
测试样例:
1024,19,2,6
返回:1100
思路:
i j
1024:100000000 00
19 : 10011
我们可以右移位的方式将19的每一比特位拿到,再把这个1左移位的方式,或到1024上面去。
#include<iostream> using namespace std; int binInsert(int n,int m,int j,int i) { int u = 0; for(int k = j; k <= i; ++k) { int temp = ((m >> u)&1); //拿到m从右到左相对应的比特位。 n |=( temp << k ); u++; } return n; } int main() { //cout << binInsert(1024,19,6,2) << endl; cout << binInsert(4355,4,2,7) << endl; cout << "hello..."<<endl; return 0; }
思路二:仔细阅读题目发现m的二进制位数小于等于i-j+1,说明是可以将m整个或到n上的,这就可以直接将m左移j位,直接或到n上,我第一个方法以为可能m只是有一部分或到n上去。
int binInsert(int n,int m,int j,int i) { n |= (m << j); return n; }
相关文章推荐
- 程序员面试金典--面试26之介于0和1之间的实数,类型为double,返回它的二进制表示
- 程序员面试金典 -- 面试29之交换一个数的二进制的奇数位和偶数位
- 程序员面试金典: 二进制插入、二进制小数
- 1089. Insert or Merge -25[插入和归并排序]
- 上传图片以二进制插入到数据库,且读取显示
- 1035. 插入与归并(25)
- 整数的二进制表示中1的个数 【微软面试100题 第二十八题】
- 程序员面试金典——二进制小数_(位运算)
- 1043. Is It a Binary Search Tree (25)--BST引用插入、二叉树遍历模板
- Spring面试问答Top 25
- SQL点滴25—T-SQL面试语句,练练手
- 面试笔试杂项积累-leetcode 21-25
- 1035. 插入与归并(25)
- 1035. 插入与归并(25)
- 将项目发布到云主机,插入记录时显示错误:将截断字符串或二进制数据。
- 【LeetCode-面试算法经典-Java实现】【057-Insert Interval(插入区间)】
- 微软等面试100题筛选答案-25-求最长连续数字子串
- 1035. 插入与归并(25)
- c# 将图片的二进制数据插入到数据库中
- 网易面试之半径的平方如果为25 优雅的点就有:(+/-3, +/-4), (+/-4, +/-3), (0, +/-5) (+/-5, 0),一共12个点。