基础编程题之二进制插入(位运算)

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础编程题之二进制插入(位运算)相关的知识,希望对你有一定的参考价值。

题目

在这里插入图片描述

题目的意思是给出n和m的二级制,要求把m的二进制数字插入到n的二进制的第j位到第i位(从右向左),它保证n的第j位和第i位均为0
在这里插入图片描述
这道题我在开始做的时候,没有注意到它保证了n的第j位和第i位均为0这样的条件,所以做法较为麻烦,具体就是Z转为二进制后再依次追加

class BinInsert {
public:
	int binInsert(int n, int m, int j, int i)
	{
	string n_string;
	while (j> 0)//把第0位到第j位的先转换过来
	{
		n_string += (n % 2) +'0';
		n /= 2;
		j--;
	}
	while (m)//然后把m的二进制依次放进去
	{
		n_string += (m % 2) + '0';
		m /= 2;
		n /= 2;//注意不要忘记同步n
	}
	while (n)//最后把n的二进制补满
	{
		n_string += (n % 2) + '0';
		n /= 2;
	}
	//此时得到了二进制数字是相反的,但是不要反转,因为下面转换时直接可以从0开始
	int ret=0;
	for (size_t i = 0; i < n_string.size(); i++)//二进制转换为十进制
	{
	ret += (n_string[i]-'0')*pow(2, i);
	}
	return ret;
	}
};

但是这道题中“保证了n的第j位和第i位均为0”,这样的话就使得题目难度大大降低,直接让m左移j位,然后与n进行或运算,或运算有1就为1
在这里插入图片描述

以上是关于基础编程题之二进制插入(位运算)的主要内容,如果未能解决你的问题,请参考以下文章

基础编程题之不用加减乘除做加法

Leetcode刷题之位运算(Java)

Leetcode刷题之位运算(Java)

经典Python面试题之基础80问 Python开发

编程思想:巧用位运算重构代码

Java基础之二进制的位运算介绍