其他分享
首页 > 其他分享> > 位运算——二进制截断和插入

位运算——二进制截断和插入

作者:互联网

面试题 05.01. 插入
给定两个整型数字 N 与 M,以及表示比特位置的 i 与 j(i <= j,且从 0 位开始计算)。

编写一种方法,使 M 对应的二进制数字插入 N 对应的二进制数字的第 i ~ j 位区域,不足之处用 0 补齐。具体插入过程如图所示。

func insertBits(N int, M int, i int, j int) int {
    left := N >> j >> 1
    left = left << j << 1         //清空左半部分 和  中部分的位
    middle := M << i              //作为填补中部分的候选
    right  := N&((1<<i)-1)        //保留N的右部分
    return left | middle | right  //相加
}

可不可以少一点儿代码?

func insertBits(N int, M int, i int, j int) int {
    return (N >> j >> 1) << j << 1 | M << i |  N&((1<<i)-1)
}

标签:插入,二进制,insertBits,截断,int,func,left
来源: https://blog.csdn.net/dawnto/article/details/120780959