Java每日一题——二进制插入

该博客介绍了一道编程题目,要求在32位整数n的二进制表示中,将另一个整数m的二进制位插入指定位置。解题思路是将m左移j位后,通过按位或运算与n相或得到结果。代码实现简洁,主要运用了Java的左移操作符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、题目描述

给定两个32位整数n和m,同时给定i和j,将m的二进制数位插入到n的二进制的第j到第i位,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1,其中二进制的位数从0开始由低到高。

测试样例:

1024,19,2,6
返回:1100

题目链接:

二进制插入__牛客网

二、解题思路

题目中已经保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1。

将m和n分别转换成二进制, 发现将m的二进制数位插入到n的二进制的第j到第i位,即将m左移j位后求和(或使用或运算)即为所求。代码非常简单,但是想到使用左移却不容易,可以在以后遇到题目中包含“二进制”时,考虑到移位运算符。

移位运算符

1.左移  <<

        最左侧位去掉,最右侧补0。

2.右移  >>

        最右侧位去掉,最左侧补符号位(正数补0,负数补1)。

3.无符号右移  >>>

        最右侧位去掉,最左侧补0。

三、代码

import java.util.*;

public class BinInsert {
    public int binInsert(int n, int m, int j, int i) {
        m<<=j;//m左移j位
        return m|n;//或m+n
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值