【问题标题】:How to insert bit into long number如何将位插入长数
【发布时间】:2018-09-03 13:05:26
【问题描述】:

有一个位序列。是否可以在其他位之间的特定位置插入位?

例如:

  1. 我们有一些数字long n,在二进制中看起来像10010
  2. 我们有一些方法long insert(long numb, position);
  3. 使用insert(n, 2)后,我们必须得到以下位序列:101010

感谢您的回答!

【问题讨论】:

  • 把问题分解成更小的部分,或者考虑这个问题的相似之处(然后把它分解成更小的部分)。每个部分都应该相当容易解决。这就是编程的精髓。
  • 我认为你在第三个位置插入了位而不是第二个(第三步)。

标签: java bit-manipulation bit


【解决方案1】:
  1. long 转换为二进制String
  2. 在指定位置插入位
  3. 然后将其转换回long

public long insert(long number, int position) {
    String longString = Long.toBinaryString(number);
    longString = longString.substring(0, position) + "1" + longString.substring(position);
    return Long.parseLong(longString, 2);
}

【讨论】:

  • 这太过分了。用按位运算可以轻松完成,为什么要转换成字符串?
  • @LưuVĩnhPhúc 可能比使用按位运算效率低,但更简单。
【解决方案2】:

我会将数字“n”左移 1 位。然后我将创建一个值为 1 的长 l1,将其左移“位置”位,最后 OR l1 和 n。

此外,根据您的用例,可能需要在最高有效位移出(或执行位)之前保存/保留它。

【讨论】:

    猜你喜欢
    • 2020-12-25
    • 1970-01-01
    • 2019-06-27
    • 2021-11-27
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    相关资源
    最近更新 更多