gpt4 book ai didi

java - 将二进制数乘以二

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:36:23 28 4
gpt4 key购买 nike

我正在尝试将一个二进制数乘以 2,而不是贪图其他计数系统。

我的算法是:

  • 如果 lead digi 为 1,则生成 0 并将 1 添加到标记中的前导 ('1'00 -> 1'0'00) 数字
  • 从数组的后部开始,如果(第i个元素为1,使之变为0),则
  • 寻找下一个 0
  • 把0变成1
  • 使必为1的元素之间全部为0
  • 终止点很可能是错误的,我可以通过标志(在第 1 步)和 if 语句轻松修复,以确定循环结束(第 2 步)变量

    String ori = "10001";

    char[] arry = ori.toCharArray();

    System.out.println("start: " + new String(arry));

    if (arry[0] == '1') {
    arry = ("1" + ori).toCharArray();
    arry[1] = '0';
    }

    System.out.println("start: " + new String(arry));

    for (int i = arry.length - 1; i > 0; i--) { // not the lend digi

    if (isOneThenChange(arry, i)) {

    // hunt down next 0
    int index = hunt(arry, i);

    if (index == -1) {

    for (int ii = 0; ii < arry.length; ii++) {

    System.out.print(arry[ii]);
    }

    System.exit(0);
    }

    System.out.println("index is: " + index);
    System.out.println("01234564");
    System.out.println(arry);

    // make it into 1
    arry[index] = '1';

    // make the 1s in between 0s..
    //// safe assumption index.. i and all 1s
    for (int k = index - 1; k < i; k++) {
    arry[k] = '1';
    }
    }

    // Continue the loop and look for the next one
    }

    System.out.println("end: " + new String(arry));

寻找0的方法:

private static int hunt(char[] arry, int i) {

for (int j = i; j > 0; j--) {
if (arry[j] == '0')
return j;
}
return -1;
}

将位从 1 翻转到 0 的方法:

private static boolean isOneThenChange(char[] a, int i) {
if (a[i] == '1') {
a[i] = '0';
return true;
}
return false;
}

我调试我的代码一直不成功,我怀疑它在第 3、4、5 步

如何调试我的算法,并使其按预期运行?

最佳答案

在二进制中,如果左移,就是乘以 2。因此,就字符串而言,如果附加 0,实际上就是乘以 2。

x = 1110   // 14 in decimal

x << 1 // 28 in decimal

但是,由于您使用的是字符串:

String x = "1110"; // 14 in decimal

// As long as x != 0, append "0"
if (!x.equals("0")) {

x = x + "0"; // 11100 = 28
}

这与将 10 进制数乘以 10 左移相同:

12
120
1,200

对于任何基数(基数),向左移动一位就是将你的数字乘以基数。 (在本例中为基数 2)。向右移动有效地将数字除以数字的基数并向下舍入。

关于java - 将二进制数乘以二,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50092901/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com