首页 > 解决方案 > 将二进制数乘以二

问题描述

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

我的算法是:

追捕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 步

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

标签: javaalgorithmbinary

解决方案


在二进制中,如果左移,则乘以 2。因此,就字符串而言,如果附加 a 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)。向右移动有效地将数字除以数字的基数并向下舍入。


推荐阅读