基数変換 | rpn入門(初級編) [講座] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 講座 | rpn入門 | rpnの使い方を基本から応用まできちんと学習。

HOME > 講座 > rpn入門 > 初級編 > 基数変換

hatena twitter facebook rss ソーシャルブックマーク

基数変換

人が使うのは10進数、コンピュータが使うのは…

 人は計算する時に0~9の数字を使います。でも、なぜと0から9の数字が使われるのかと不思議に思ったことありませんか。これは頭の中で十進数を使って計算していることを示しています。指が10本あったから自然に十進数になったという説もありますが、指のないコンピュータは何進数を使うのでしょうか。

実は、コンピュータは0と1の数字しか使いません。つまり、二進数で全ての数を計算していることになります。どんな大きな数字も小さな数字もプラスの数もマイナスの数も全部二進数、つまり、0と1だけで表現します。したがって、二進数で表現するととても長い桁数になってしまいます。

例えば、「1001001010」のような数字を計算する場合、0と1だけでは解りにくいので、二進数3つをまとめて八進数、4つをまとめて十六進数とすることが多いです。もちろん、十進数でも十六進数でも元になる数は同じなので、互いに変換はできます。このような進数の変換を基数変換といいます。

rpnで二進、八進、十進、十六進

 ここでは、rpnを使って二進数、八進数、十進数、十六進数の基数変換を行なってみましょう。方法はとても簡単です。

計算結果を二進数で得たい場合:式の最後に「b」を置く。

    例:1から5までの積をとって二進数で表す。
    >rpn 1 2 * 3 * 4 * 5 * b
    1111000b


計算結果を八進数で得たい場合:式の最後に「o」を置く。

    例:1から5までの積をとって八進数で表す。
    >rpn 1 2 * 3 * 4 * 5 * o
    170o


計算結果を十進数で得たい場合:式の最後に何も置かない。

    >rpn 1 2 * 3 * 4 * 5 *
    120


計算結果を十六進数で得たい場合:式の最後に「h」を置く。

    例:1から5までの積をとって十六進数で表す。
    >rpn 1 2 * 3 * 4 * 5 * h
    78h


これらの数字、「1111000b」も「170o」も「120」も「78h」もすべて同じ値です。ちなみに、最も簡単な使い方は、以下のような定数の変換です。十進数の300を十六進数に変換してみました。

  >rpn 300 h
  12ch


連続でいろんな基数に変換してみよう

 上記の例題は全て、DOSのコマンドラインから逆ポーランド式を受け取るものでしたが、rpnは以下のように標準入力を使った連続変換もできます。

  >rpn
  1 2 * 3 * 4 * 5 * b   <-- 入力
  1111000b              <-- 答え
  1 2 * 3 * 4 * 5 * o   <-- 入力
  170o                  <-- 答え
  1 2 * 3 * 4 * 5 *     <-- 入力
  120                   <-- 答え
  1 2 * 3 * 4 * 5 * h   <-- 入力
  78h                   <-- 答え
  300 h                 <-- 入力
  12ch                  <-- 答え
  ^Z                    <-- 入力(終わり)
  ※^ZはCtrlキーを押したまま、Zキーを押します(最後にエンターキーを入力)。


計算式に基数がちゃんぽん

 さて、rpnは逆ポーランド式の最後にb, o, hを使って、答えを基数変換できましたが、数値の後にb, o, hを直接付与して、各基数を混ぜ合わせて計算することもできます。基数の複合計算ですね。

例:二進数の1011010に八進数の777を足して十六進数のabを掛ける。答えは十進で得る。

  >rpn 1011010b 777o + abh *
  102771


コンピュータのプログラマーなら基礎知識の基数変換ですが、初めての人は馴染みの十進数(例えば生まれた西暦とか)を二進数や十六進数に変換してみれば、コンピュータ数字に親しみがわくかもしれません。是非試してみてください。

  >rpn 1955 h
  7a3h             (ビルゲイツの誕生年です)


注釈現在では計算するときに十進数を使うのが当たり前のように思えますが、人類史の初めに数などはなく、あっても「1」とか「たくさん」レベルでした。その後、文明の進歩にしたがって数えるという行為が必要になって、どんどん数を表す記号が増えたそうです。実際にメソポタミアでは60進数が使われましたが、60進数は割り切れる数が多いこと、1年を360日とする彼らの暦に合うことから文明が滅んでからもかなり長い間使われていました。その後、位取りの確立、0の発明、小数の体系化等を経て、ようやく現在の十進数の隆盛となったわけです。もちろん、全てが十進数になったわけではなく、例えば時計は使っている数字こそ10種類ですが、実質的に60進数のままですし、一日の時間は24進数です。コンピュータの世界でも2進数、16進数が普通に使われています。


『今回の問題』………………………………………………………………………
  以下を逆ポーランド記法式に変換せよ。
  (1)  2進数の100と2進数の100を足して、答えを16進数で得る式。
  (2)  2進数の1000と10進数の100を足して、答えを8進数で得る式。
  (3)  10進数の-1を2進数で得る式。
…………………………………………………………………………………………

答えはこちらLinkIcon

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn試用版と標準版(2kリビジョン)はダブルクォートで囲って下さい。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS参照ください。

注意rpnの障害情報はこちら

警告rpn試用版の場合、複雑なプログラムや処理時間のかかるプログラムの一部には動作しないものがあるかもしれません。あくまで無料提供であることを勘案・了承ください。rpn標準版は、すべてのプログラムが動作します。