(...、自分の名前をコンパイルした名前は何元を見つけられませんでした)可能性を除い標本Conormalで、バイナリの間の変換といえば、最も一般的ですが、私たちは、最も一般的に使用したい場合それが何であるかを最終的に法のどのような原則?
以下、この進変換チャートのように、私たちは、商がゼロになるまで、彼は8に加えて、されている限り、小数進1348 rpmのを知って、そして最後の残りの部分は、私たちが望む結果の逆です。
しかし、なぜいない疑い我々が使用する数式が正しくないことですか?それの合法性はどこですか?
以下は、方法の適法性は、上記証明します
私たちは、次のように小数値の分布の右の数であることを知っています:
まず、我々は最終的な結果は同じで、ある小数の変換、または元進数に非常に退屈な小数を行うが、我々はそれのビット数を取得する方法?
次の手順を考えてみます。
我々は除いて、個々のビットよりも多くのデジタル標本を取得するために、同じ方法を採用した場合:
まず1348パーセント10 = 8、これは何を示しているのでしょうか?
我々の1348年我々は最下位ビットにビット数を得ることができるように、10 134 8 1 134 1 10 ^ 10 ^ 0と8、に分けることができることをこれは示しています。
だから我々は最後の位置に番号を入力することができます
あなたは巧妙な原理を発見したことがあります。そうでない場合、心配しないでください、私たちはステップを行い、あなたが出て表示される場合があります。
今回は得ることができ:10 1348 13が2 ^ 10 ^ 1と4と10 ^ 8ゼロであり、対応する、我々は10 ^ 4 1に入力することができ
13 2 10 ^ 13が一桁ではないので、私たちは10 ^ 2上で彼を埋めることはできません。
だから、どのようにそれ13を処分するには?彼のその後、10 ^ 1に加え、
私たちは10 ^ 2上の数字を記入することができます。この時点で、それは明らかである3の数字
私たちの残りは10 ^ 3の代表者の数はすでに1である、とするので、それはこの1つは、直接10 ^ 3の位置に記入できると考えるのは簡単です。
同様に、我々は小数進を変換するために、このアイデアを使用しました。
同様に、あまりにも、コンピュータ業界におけるバイナリ横行などの他のバンド、を有します。
結果我々は、この進変換を観察し、そして私たちが望む最後の数字を数え、我々はどのようなスタックバイナリ変換を達成するために、この構造を使用することができますので、逆さまです。
まず、簡単なスタック構造を実装します。
public class Stack{ private Object[] objects; private int top = -1; private static final int initialSize = 32; public Stack() { this.objects = new Object[initialSize]; } public <T> T pop(){ //<T>意味着我们可以根据需要选择返回的类型,不用每次获得都强转,虽然有类型转换错误的危险,但是这里是演示用,不做太严谨措施 if(top < 0){ return null; } return (T) objects[top --]; } public <T> T getTop(){ if(isEmpty()){ return null; } return (T) objects[top]; } public void push(Object o){ objects[++ top] = o; } public boolean isEmpty(){ return top == - 1; } }
具体实现 :
public String conversion(int source, int destinRadix){ StringBuilder builder = new StringBuilder(); Stack stack = new Stack(); while(source != 0){ //如下的运算比较低效,为了演示没有考虑效率 int left = source % destinRadix; source = (source - left) / destinRadix; stack.push(left); } while(!stack.isEmpty()){
//如果要转10进制以上的数请自行将10定义成a,11定义成b...... builder.append(stack.pop());
} return builder.toString(); }
测试: