面试题 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)
}