我不明白为什么它会打印总的二进制位而不是Java和C ++中的最后一位。我在C中检查了它,因为我认为它只显示最后一位。但是,在C ++和Java中,它会打印所有位。

public static void main(String[] args) {

    toBin(2);
}// end of main

static void toBin(int b) {
    int modu = 0;

    if (b < 1) {
        return;
    }
    modu = b % 2;
    b=(b>>1);
    toBin(b);
    System.out.print(modu);

}// end of toBin()

最佳答案

toBin()的工作方式是先除以2

modu = b % 2;


将其添加到开头,然后除以2

b = b >> 1


并递归重复,直到没有剩余。

if (b < 1) {
  return
}


如果您以小数来考虑的话,它会容易一些。

假设您有数字4863,并想以10为底数打印出来。

首先,取n%10(即3),然后除以10,得到486。重复,得到6和48,依此类推。

打印在toBin(b)之后的原因是,因此不需要维护字符串。相反,它将首先打印最内部的递归调用,并且在退出时,将反向打印其余的调用。

本质上,以下内容(可能更容易理解)执行相同的操作,但将数字向后打印:

    while (b >= 1) {
        System.out.print(b % 2);
        b /= 2;
    }

10-08 12:52