英語N進法2016年04月27日(編集2016年04月27日)Tweet符号化や暗号化の処理を実装するとき、プログラムでN進法の実装をできる必要があります。この記事は、Javaを使ってN進法の説明と実装をおこないます。コードを通して、N進法の理解と実装方法を理解します。1.8.0_77を利用します。皆さんが普段、生活の中で何気なく使っている数が10進数です。なにか物をカウントする時に、1,2,3,...10,11と数えると思います。この数を10進数と呼びます。10進数は、基数を10とした数値の表現方法で、0から9までの10種類の数字を用いて表現します。一方で、パソコン内部では2進数を使います。数え方は、0,1,10,11のように表現します。これは、0と1でスイッチのON/OFFを処理しているからです。プログラムでは、2進数の他に、8進数、16進数をよく使います。2進数この記事では、パソコンの基本となる2進数でN進法の計算方法を理解します。暗記するだけでなく、考え方をしっかりと理解してください。N進法の考え方は、どんな数値でも同じなので、8進数、16進数、58進数(Base58)、64進数(Base64)でもプログラム実装できるようになるはずです。2進数(計算)10進数を2進数にします。例として、10進数の8を2進数に変換する計算をします。10進数から2進数を求める10進数の値と基数の割り算の余り(剰余)を逆さから書いた数がN進数です。上記の図の例だと、基数が「2」、剰余が青い矢印の左の値「0,0,0,1」になります。よって、2進数の値は1000です。2進数(プログラム)では、上記の計算をプログラムで実装します。}}ポイントとなる箇所を説明します。2)をwhile文で繰り返します。これらの値を文字列でつなげて、"0001"を生成します。文字列を逆順にするつなげた文字列の順を逆にします。res.reverse().toString();逆順にすることで"0001"が"1000"になります。以上がエンコード処理です。実行Eclipseで上記のencode_binaryメソッドを実行します。}}10進数"8"を、2進数にエンコードします。Console10002進数"1000"が出力されました。2進数の変換は可能です。i))Binaryは英語で2進数を意味します。String(文字列)つまり、「2進数文字列へ」という意味のメソッド名です。Eclipseで実行してみましょう。}}10進数"8"を、2進数にエンコードします。Console1000正常に変換されました。10進数(計算)2進数を10進数にします。例として、2進数の10100を10進数に変換する計算をします。1)の乗数を加算していきます。10進数(プログラム)では、上記の計算をプログラム化してみましょう。}}ポイントとなる箇所を説明します。基数の乗数を加算していく基数の乗数を加算していくプログラムは以下のようになります。index;}ループ内でnum*2するのがポイントです。桁数の重みの処理です。実行Eclipseで上記のencode_binaryメソッドを実行します。}}2進数"10100"を、10進数にデコードします。Console2010進数"20"が出力されました。10進数の変換は可能です。radix)文字列sの基数をradixに指定します。Eclipseで実行してみましょう。}}2進数"10100"を、10進数にエンコードします。Console20正常に変換されました。まとめN進数の変換は、文字エンコードやセキュリティの実装をする場合に役立ちます。この記事の考え方が理解できれば、8進数、16進数だけでなく、Base58やBase64のアルゴリズムも実装できるはずです。