(57)【要約】【課題】二進数データから十進数データへの変換の計算量を削減する。【解決手段】記憶部１１は、二進表現の４ビットと十進表現の１桁との対応を示す変換情報１３を記憶する。変換部１２は、二進数データ１４から連続する４ビットを選択し、変換情報１３を参照して、二進数データ１４における選択した４ビットの位置とその少なくとも一部のビットの値とから、十進数データ１５の１桁の値を決定する。変換部１２は、二進数データ１４から決定した１桁の値に対応する二進数を減算する。変換部１２は、減算後の二進数データ１４から他の４ビットを選択して十進数データ１５の他の１桁の値を決定することを繰り返すことで、二進数データ１４を十進数データ１５に変換する。【選択図】図１
2017122951.tif 000002
【特許請求の範囲】
【請求項１】
二進表現の４ビットと十進表現の１桁との対応を示す変換情報を記憶する記憶部と、
二進数データから連続する４ビットを選択し、前記変換情報を参照して、前記二進数データにおける前記選択した４ビットの位置と前記選択した４ビットのうちの少なくとも一部のビットの値とから、十進数データの１桁の値を決定し、前記二進数データから前記決定した１桁の値に対応する二進数を減算し、減算後の前記二進数データから前記選択した４ビットより下位にある他の４ビットを選択して前記十進数データの他の１桁の値を決定することを繰り返すことで、前記二進数データを前記十進数データに変換する変換部と、
を有する情報処理装置。
【請求項２】
前記変換情報は、境界値と十進表現の第１の桁位置および第２の桁位置とを含み、
前記変換部は、前記二進数データと前記境界値との比較に応じて、前記第１の桁位置と前記第２の桁位置の何れか一方の桁位置を選択し、前記十進数データの中の前記選択した桁位置の値を決定する、
請求項１記載の情報処理装置。
【請求項３】
前記変換情報は、境界値と十進表現の第１の値および第２の値とを含み、
前記変換部は、前記二進数データと前記境界値との比較に応じて、前記第１の値と前記第２の値の何れか一方の値を選択し、前記選択した値を前記決定した１桁の値とする、
請求項１記載の情報処理装置。
【請求項４】
前記変換部は、前記二進数データから値が所定値である先頭のビットを検出し、前記先頭のビットと前記先頭のビットに続く３ビットとを選択する、
請求項１記載の情報処理装置。
【請求項５】
コンピュータが実行する十進数変換方法であって、
二進数データから連続する４ビットを選択し、
二進表現の４ビットと十進表現の１桁との対応を示す変換情報を参照して、前記二進数データにおける前記選択した４ビットの位置と前記選択した４ビットのうちの少なくとも一部のビットの値とから、十進数データの１桁の値を決定し、
前記二進数データから前記決定した１桁の値に対応する二進数を減算し、
減算後の前記二進数データから前記選択した４ビットより下位にある他の４ビットを選択して前記十進数データの他の１桁の値を決定することを繰り返すことで、前記二進数データを前記十進数データに変換する、
十進数変換方法。
【請求項６】
コンピュータに、
二進数データから連続する４ビットを選択し、
二進表現の４ビットと十進表現の１桁との対応を示す変換情報を参照して、前記二進数データにおける前記選択した４ビットの位置と前記選択した４ビットのうちの少なくとも一部のビットの値とから、十進数データの１桁の値を決定し、
前記二進数データから前記決定した１桁の値に対応する二進数を減算し、
減算後の前記二進数データから前記選択した４ビットより下位にある他の４ビットを選択して前記十進数データの他の１桁の値を決定することを繰り返すことで、前記二進数データを前記十進数データに変換する、
処理を実行させる十進数変換プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置、十進数変換方法および十進数変換プログラムに関する。
【背景技術】
【０００２】
コンピュータの内部では、プロセッサが処理する数値やメモリに記憶される数値は、各ビットが０，１の何れかの値をとる二進数で表現されていることが多い。一方、人間にとっては、コンピュータから提示される数値は、各桁が０，１，２，３，４，５，６，７，８，９の何れかの値をとる十進数で表現されることが好ましい。このため、コンピュータが数値を出力するとき、二進表現から十進表現への変換を行うことがある。
【０００３】
例えば、データベースに十進表現の数値を格納するとき、コンピュータは、二進数を、十進数の各桁を４ビット以上で表現したものに変換する。十進数の１桁を４ビットで表現したものは、二進化十進数（ＢＣＤ：Binary Coded Decimal）と言うことがある。また、例えば、十進表現の数値をディスプレイに表示するとき、コンピュータは、二進数を十進数に変換し、十進数の各桁を文字コードに変換して画像として表示する。
【０００４】
二進数を十進数に変換する単純なアルゴリズムとしては、二進数を繰り返し１０で割ることで、十進数の下位の桁から１つずつ値を決定していく方法が考えられる。この単純なアルゴリズムによれば、二進数を１０（二進表現で１０１０）で割った剰余を十進数の一の位とする。この商を更に１０で割った剰余を十進数の十の位とする。この商を更に１０で割った剰余を十進数の百の位とする。これを商が０になるまで繰り返す。これに対し、特別な回路を利用して二進数を十進数に変換するコンピュータが提案されている。
【０００５】
例えば、十進表現の数値を２倍する回路を利用する二進十進変換回路が提案されている。提案の二進十進変換回路は、結果の十進数を格納する十進データレジスタを０に初期化する。二進十進変換回路は、二進数を左に１ビットシフトすると共に、十進データレジスタの値を２倍する。また、二進十進変換回路は、ビットシフトによって消滅した最上位ビットの値を十進データレジスタに加算する。二進十進変換回路は、二進数のビット数だけ上記の処理を繰り返し、十進データレジスタの値を出力する。
【０００６】
また、例えば、十進表現の数値を１０倍する１０倍回路と十進表現の数値を２倍する２倍回路とを利用する二進十進変換回路が提案されている。提案の二進十進変換回路は、１０倍回路の出力から２倍回路の出力を減算することで、十進表現の数値を８倍することができる。二進十進変換回路は、結果の十進数を格納する十進データレジスタを０に初期化する。二進十進変換回路は、二進数を左に３ビットシフトすると共に、十進データレジスタの値を８倍する。また、二進十進変換回路は、ビットシフトによって消滅した上位３ビットの値を十進データレジスタに加算する。二進十進変換回路は、元の二進数の最下位ビットが消滅するまで上記の処理を繰り返し、十進データレジスタの値を出力する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平１１−６５８２０号公報
【特許文献２】特開２０００−２００１７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
人間が使用する数字は、「５０００」や「６７０００」のように十進表現にしたときに０の桁を含むことが多く、下位の桁が連続して０になることも多い。これに対し、上記の単純なアルゴリズムでは、十進数の下位の桁から１つずつ値を決定していくため、このような数値を効率的に変換できないという問題がある。また、上記の特許文献１，２に記載された技術では、特別な変換回路を使用することになる。また、特許文献１，２に記載された技術では、二進数の全てのビットを走査し終えるまで十進数の何れの桁も確定せず、単純なアルゴリズムの場合と同様に計算量が多くなってしまう。
【０００９】
１つの側面では、本発明は、二進数データから十進数データへの変換の計算量を削減できる情報処理装置、十進数変換方法および十進数変換プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、記憶部と変換部とを有する情報処理装置が提供される。記憶部は、二進表現の４ビットと十進表現の１桁との対応を示す変換情報を記憶する。変換部は、二進数データから連続する４ビットを選択し、変換情報を参照して、二進数データにおける選択した４ビットの位置と選択した４ビットのうちの少なくとも一部のビットの値とから、十進数データの１桁の値を決定する。変換部は、二進数データから決定した１桁の値に対応する二進数を減算する。変換部は、減算後の二進数データから選択した４ビットより下位にある他の４ビットを選択して十進数データの他の１桁の値を決定することを繰り返すことで、二進数データを十進数データに変換する。
【００１１】
また、１つの態様では、コンピュータが実行する十進数変換方法が提供される。また、１つの態様では、コンピュータに実行させる十進数変換プログラムが提供される。
【発明の効果】
【００１２】
１つの側面では、二進数データから十進数データへの変換の計算量を削減できる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態の情報処理装置の例を示す図である。
【図２】情報処理装置のハードウェア例を示すブロック図である。
【図３】情報処理装置の機能例を示すブロック図である。
【図４】十進数の使用例を示す図である。
【図５】二進数の４ビットと十進数の１桁の関係例を示す図である。
【図６】変換テーブルの例を示す図である。
【図７】逆変換テーブルの例を示す図である。
【図８】二進数から十進数への変換例を示す図である。
【図９】変換テーブル生成の手順例を示す図である。
【図１０】二進十進変換の手順例を示す図である。
【図１１】二進十進変換のプログラム例を示す図である。
【発明を実施するための形態】
【００１４】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１５】
図１は、第１の実施の形態の情報処理装置の例を示す図である。
第１の実施の形態の情報処理装置１０は、二進数データ１４を十進数データ１５に変換する。二進数データ１４は、数値を二進数で表現したデータであり、０，１の何れかの値をとるビットを４つ以上含むビット列である。二進数では、連続する整数が、０，１，１０，１１，１００，１０１，１１０，１１１，１０００，１００１，１０１０，１０１１，１１００，１１０１，１１１０，１１１１，…のように１ずつ増加するビット列で表現される。十進数データ１５は、数値を十進数で表現したデータであり、０，１，２，３，４，５，６，７，８，９の何れかの値をとる桁を１つ以上含む。十進数の１桁は、例えば、４ビット以上のデータ単位１つで表現される。十進数データ１５は、１桁を４ビットで表現した二進化十進数（ＢＣＤ）であってもよい。
【００１６】
情報処理装置１０は、クライアントコンピュータなどのクライアント装置でもよいし、クライアント装置からアクセスされるサーバコンピュータなどのサーバ装置でもよい。
情報処理装置１０は、記憶部１１および変換部１２を有する。記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性の半導体メモリでもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性のストレージでもよい。変換部１２は、例えば、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサである。ただし、変換部１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。プロセッサは、ＲＡＭなどのメモリに記憶されたプログラムを実行する。プログラムには、以下に説明する処理を記載した十進数変換プログラムが含まれる。複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と言うこともある。
【００１７】
記憶部１１は、変換情報１３を記憶する。変換情報１３は、二進表現の４ビットと十進表現の１桁との対応を示す。変換情報１３は、二進表現における４ビットの位置およびその値に対して、十進表現における桁およびその値を対応付けたテーブルであってもよい。４ビットの位置は、例えば、４ビットの先頭が二進表現の最上位ビットまたは最下位ビットから数えて何番目であるかで表現される。変換情報１３を参照するときに先頭ビットの値が１であることを前提としている場合、変換情報１３は、先頭ビットの位置およびそれに続く３ビットの値に対して、十進表現における桁およびその値を対応付けてもよい。
【００１８】
ここで、二進表現における４ビットの位置およびその値に対して、十進表現における桁およびその値が１つに確定できない場合がある。そこで、変換情報１３は、境界値と、十進表現における第１の桁および第１の値と、十進表現における第２の桁および第２の値とを含んでもよい。その場合、二進数データ１４と境界値との比較に応じて、第１の桁と第２の桁の一方を選択すると共に第１の値と第２の値の一方を選択すればよい。
【００１９】
変換部１２は、二進数データ１４を十進数データ１５に変換する場合、二進数データ１４から連続する４ビットを選択する。例えば、変換部１２は、二進数データ１４の最上位ビットから最下位ビットに向かって値が所定値（例えば、１）のビットを検索し、条件に合致する先頭のビットとそれに続く３ビットとを選択する。
【００２０】
変換部１２は、二進数データ１４から４ビットを選択すると、記憶部１１に記憶された変換情報１３を参照して、選択した４ビットに対応する十進数データ１５の１桁の値を決定する。具体的には、変換部１２は、二進数データ１４における選択した４ビットの位置（例えば、その先頭のビットの位置）と、選択した４ビットのうちの少なくとも一部のビットの値（例えば、先頭のビットに続く３ビットの値）を用いて、変換情報１３を検索する。変換部１２は、十進表現における１桁とその値を変換情報１３から取得し、変換情報１３から取得した情報に基づいて十進数データ１５の１桁の値を決定する。
【００２１】
変換部１２は、十進数データ１５の１桁の値を決定すると、決定した１桁の値に対応する二進数を二進数データ１４から減算する。例えば、十進数データ１５の千の位を６と決定した場合、二進数データ１４から６０００に相当する二進数を減算する。そして、変換部１２は、減算後の二進数データ１４に対して上記の処理を繰り返す。すなわち、変換部１２は、減算後の二進数データ１４から、前に選択した４ビットより下位にある他の４ビットを選択する。変換部１２は、変換情報１３を参照して、選択した他の４ビットに対応する十進数データ１５の他の１桁の値を決定する。
【００２２】
上記を二進数データ１４が０になるまで繰り返すことで、二進数データ１４を十進数データ１５に変換することができる。ただし、上記を二進数データ１４が１０未満になるまで繰り返し、十進数データ１５の最下位桁は変換情報１３を参照せずに直接決定するようにしてもよい。なお、十進数データ１５の各桁の初期値は０である。
【００２３】
第１の実施の形態の情報処理装置１０によれば、二進数データ１４から連続する４ビットが選択され、変換情報１３を参照して、選択した４ビットの位置とその少なくとも一部のビットの値とから十進数データ１５の１桁の値が決定される。そして、二進数データ１４から、決定した１桁の値に対応する二進数が減算される。減算後の二進数データ１４について上記を繰り返すことで、二進数データ１４が十進数データ１５に変換される。
【００２４】
これにより、二進数データ１４を十進数データ１５に変換する計算量を削減することができる。特に、二進数を繰り返し１０（二進表現の１０１０）で割って十進数の下位から１桁ずつ値を決定していく単純なアルゴリズムと比べて、計算量を削減できる。例えば、二進数データ１４から、値が所定値（例えば、１）のビットとそれに続く３ビットを選択し、値がそれ以外（例えば、０）のビット列をスキップすることが可能である。これにより、十進数データ１５の桁のうち非零の桁の数程度、上記の処理を繰り返せばよく、十進数データ１５の桁のうち０の桁については上記の処理が不要である。従って、十進表現にしたとき０の桁が多くなるような数値についても効率的に変換することができる。
【００２５】
なお、変換情報１３は二進表現の丁度４ビットから十進表現の１桁を検索可能にすることが好ましく、変換部１２は二進数データ１４から１回に丁度４ビットを選択することが好ましい。ただし、変換情報１３を、二進表現の５ビット以上から十進表現の１桁を検索可能にするよう変形することも可能であり、変換部１２が二進数データ１４から１回に５ビット以上を選択するよう変形することも可能である。すなわち、変換情報１３は二進表現の少なくとも４ビットから十進表現の１桁を検索可能にすればよく、変換部１２は二進数データ１４から１回に少なくとも４ビットを選択すればよい。
【００２６】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、情報処理装置のハードウェア例を示すブロック図である。
【００２７】
第２の実施の形態の情報処理装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７は、バス１０８に接続されている。なお、情報処理装置１００は、第１の実施の形態の情報処理装置１０に対応する。ＣＰＵ１０１は、第１の実施の形態の変換部１２に対応する。ＲＡＭ１０２またはＨＤＤ１０３は、第１の実施の形態の記憶部１１に対応する。
【００２８】
ＣＰＵ１０１は、プログラムの命令を実行する演算回路を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、情報処理装置１００は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と言うこともある。
【００２９】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、情報処理装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００３０】
ＨＤＤ１０３は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。プログラムには、十進数変換プログラムが含まれる。なお、情報処理装置１００は、フラッシュメモリやＳＳＤなどの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００３１】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、情報処理装置１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなどを用いることができる。
【００３２】
入力信号処理部１０５は、情報処理装置１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、情報処理装置１００に、複数の種類の入力デバイスが接続されていてもよい。
【００３３】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００３４】
通信インタフェース１０７は、ネットワーク１１４に接続され、ネットワーク１１４を介して他の装置と通信を行うインタフェースである。通信インタフェース１０７は、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、基地局と無線リンクで接続される無線通信インタフェースでもよい。
【００３５】
図３は、情報処理装置の機能例を示すブロック図である。
情報処理装置１００は、アプリケーション部１２１、データベース管理部１２２、データベース記憶部１２３、表示制御部１２４、数値変換部１２５および変換テーブル記憶部１２６を有する。アプリケーション部１２１、データベース管理部１２２、表示制御部１２４および数値変換部１２５は、例えば、ＣＰＵ１０１が実行するプログラムモジュールを用いて実装される。データベース記憶部１２３および変換テーブル記憶部１２６は、例えば、ＲＡＭ１０２またはＨＤＤ１０３に確保した記憶領域を用いて実装される。
【００３６】
アプリケーション部１２１は、数値を扱うアプリケーションソフトウェアを実行する。数値は通常、二進数で表現される。数値のデータ型としては、符号付き８ビット整数、符号なし８ビット整数、符号付き１６ビット整数、符号なし１６ビット整数、符号付き３２ビット整数、符号なし３２ビット整数、符号付き６４ビット整数、符号なし６４ビット整数などが考えられる。アプリケーション部１２１は、データベース管理部１２２を介してデータベースに数値を保存することがある。また、アプリケーション部１２１は、表示制御部１２４を介してディスプレイ１１１に数値を表示させることがある。
【００３７】
データベース管理部１２２は、データベース記憶部１２３に記憶されたデータベースを管理する。データベース管理部１２２は、アプリケーション部１２１からの要求に応じて、データベースへのデータの追加、データベースに記憶されたデータの更新や削除、データベースからのデータの検索などを行う。データベースには十進数型（Decimal型）の数値データが格納されることがある。その場合、データベース管理部１２２は、二進数から十進数への変換を数値変換部１２５に依頼し、変換された十進数を保存する。
【００３８】
データベース記憶部１２３は、定義されたデータ構造に従ってデータを体系化したデータベースを記憶する。上記のように、データベースには、十進数型の数値データが格納されることがある。十進数型の数値データは、十進数を桁毎に分離して各桁を４ビット以上のビット列で表したものである。十進数型の数値データは、各桁を４ビットで表した二進化十進数（ＢＣＤ）であってもよい。
【００３９】
表示制御部１２４は、アプリケーション部１２１からの要求に応じて、ディスプレイ１１１に画像を表示させる。ディスプレイ１１１に表示される画像には、数字が描かれることがある。その場合、表示制御部１２４は、二進数から十進数への変換を数値変換部１２５に依頼する。表示制御部１２４が取得する十進数は、データベース管理部１２２と同様に、各桁を４ビット以上のビット列で表したものである。そして、表示制御部１２４は、十進数の桁毎に当該桁の値を文字コードに変換し、文字コードが示す文字の画像をディスプレイに表示させる。文字コード体系としては、ＡＳＣＩＩ（American Standard Code for Information Interchange），ＵＴＦ（Unicode Transformation Format）−８，ＵＴＦ−３２など任意のものを使用できる。なお、第２の実施の形態では数値を表す文字列をディスプレイ１１１に表示したが、ファイルなどに保存することも可能である。
【００４０】
数値変換部１２５は、データベース管理部１２２または表示制御部１２４からの要求に応じて、二進数を十進数に変換する。変換方法の詳細は後述する。以降説明する例では、二進数を符号なし６４ビット整数で表すものとする。符号なし６４ビット整数は、０〜１８４４６７４４０７３７０９５５１６１５の範囲の整数を表現できる。なお、負の二進数については、符号を反転させて正の二進数に変換し、正の二進数を後述する変換方法によって正の十進数に変換し、最後に負の符号を付加すればよい。二進数が二の補数で表されている場合、各ビットの値を反転して１を加えることで符号を反転できる。また、以降説明する例では、十進数の各桁を符号なし８ビット整数で表すものとする。
【００４１】
変換テーブル記憶部１２６は、数値変換部１２５が使用する制御情報を記憶する。後述するように、変換テーブル記憶部１２６は、二進数の４ビットから十進数の１桁を特定する変換テーブルと、十進数の１桁から二進数を逆算する逆変換テーブルとを記憶する。変換テーブルおよび逆変換テーブルは、予め作成されて（例えば、情報処理装置１００のユーザまたは数値変換部１２５に対応するプログラムの開発者によって作成されて）変換テーブル記憶部１２６に格納されている。ただし、数値変換部１２５が変換テーブルおよび逆変換テーブルを動的に生成するようにしてもよい。変換テーブルおよび逆変換テーブルの詳細は後述する。また、変換テーブルの作成方法についても後述する。
【００４２】
図４は、十進数の使用例を示す図である。
二進数２１は「０００１１０００００１１１０００」であり、十進表現の「６２００」に相当する。二進数２１は、例えば、アプリケーション部１２１によって生成されてＲＡＭ１０２に保存される。二進数２１は、ユーザからの入力に応じて生成されてもよい。数値変換部１２５は、この二進数２１を十進数２２に変換する。なお、図４では簡略化のため、二進数２１の下位１６ビットと十進数２２の下位４桁のみを記載している。
【００４３】
十進数２２は、桁２２ａ，２２ｂ，２２ｃ，２２ｄを含む。桁２２ａは千の位、桁２２ｂは百の位、桁２２ｃは十の位、桁２２ｄは一の位である。図４では簡略化のため、桁２２ａ，２２ｂ，２２ｃ，２２ｄそれぞれについて、当該桁の値を表すビット列のうち下位４ビットのみを記載している。十進数２２は「６２００」である。よって、桁２２ａの値は６（二進表記で０１１０）、桁２２ｂの値は２（二進表記で００１０）、桁２２ｃの値は０（二進表記で００００）、桁２２ｄの値は０（二進表記で００００）になる。
【００４４】
この「６２００」を文字列として扱う場合、十進数２２の桁２２ａ，２２ｂ，２２ｃ，２２ｄの値が文字コード２３ａ，２３ｂ，２３ｃ，２３ｄに変換される。文字コード２３ａは桁２２ａに対応し、「６」を示す０ｘ３６である。文字コード２３ｂは桁２２ｂに対応し、「２」を示す０ｘ３２である。文字コード２３ｃは桁２２ｃに対応し、「０」を示す０ｘ３０である。文字コード２３ｄは桁２２ｄに対応し、「０」を示す０ｘ３０である。なお、ここでは文字コード体系としてＡＳＣＩＩを用いている。
【００４５】
十進数２２から文字コード２３ａ，２３ｂ，２３ｃ，２３ｄが生成されると、「６２００」が文字列として画面２４上に描かれる。画面２４は、ディスプレイ１１１に表示される。なお、この文字列をファイルに保存することも可能である。その場合、文字コード２３ａ，２３ｂ，２３ｃ，２３ｄがこの順序でファイルに書き込まれる。
【００４６】
次に、二進数を十進数に変換するアルゴリズムについて説明する。
二進数を十進数に変換する単純なアルゴリズムとして、二進数を１０（二進表記で１０１０）で繰り返し割り、十進数の下位の桁から順に値を決定していく方法が考えられる。すなわち、二進数を１０で割って剰余を十進数の一の位の値として決定する。その商を更に１０で割って剰余を十進数の十の位の値として決定する。これを商が０になるまで繰り返すことで、十進数の全ての桁の値を決定することができる。
【００４７】
しかし、この単純なアルゴリズムによれば、十進数の桁の数だけ割り算を繰り返すことになる。一方、人間が使用する数字は０の桁を多く含むことが多い。また、金額などを示す数字は下位の桁が連続して０になることも多い。そこで、第２の実施の形態では、十進数の下位の桁から上位の桁に向かって値を決定するのではなく、上位の桁から下位の桁に向かって値を決定していく。そして、第２の実施の形態では、十進数の全ての桁について演算を行わずに、値が０になる桁については演算をスキップできるようにする。
【００４８】
図５は、二進数の４ビットと十進数の１桁の関係例を示す図である。
以降の説明では、二進数の最下位ビット（ＬＳＢ：Least Significant Bit）をビット［０］と表記することがあり、最上位ビット（ＭＳＢ：Most Significant Bit）に向かってビット［１］，ビット［２］，…と表記することがある。二進数は６４ビットあるものとし、ＭＳＢはビット［６３］である。また、以降の説明では、十進数の最下位桁を桁［０］と表記することがあり、最上位桁に向かって桁［１］，桁［２］，…と表記することがある。十進数は２０桁あるものとし、十進数の最上位桁は桁［１９］である。ただし、図５では二進数の下位１６ビットと十進数の下位６桁のみを記載している。
【００４９】
二進数３１は「０００１０１１０００００００００」である。ここで、数値変換部１２５は、二進数３１のＭＳＢからＬＳＢに向かってビット列を走査し、最初に値が１になっているビットを検出する。検出したビットを最上位セットビットと言うことがある。数値変換部１２５は、最上位セットビットとそれに続く３ビットとを選択する。二進数３１からは、ビット［１２］，ビット［１１］，ビット［１０］，ビット［９］が選択される。
【００５０】
選択される４ビットの値は「１０１１」である。選択された４ビットの位置および値から、二進数３１は５６３２〜６１４３の範囲に絞り込まれる。範囲の最小値は、選択された４ビットより下位のビットが全て０であると仮定した場合の値である。範囲の最大値は、選択された４ビットより下位のビットが全て１であると仮定した場合の値である。よって、数値変換部１２５は、十進数の桁［３］を５または６に決定する。ここで、二進数３１が５９９９以下であれば桁［３］＝５、６０００以上であれば桁［３］＝６である。
【００５１】
二進数３２は「０００１１０００００００００００」である。数値変換部１２５は、二進数３２の最上位セットビットとそれに続く３ビットとを選択する。すると、二進数３２からは、二進数３１と同様にビット［１２］，ビット［１１］，ビット［１０］，ビット［９］が選択される。選択される４ビットの値は「１１００」である。選択された４ビットの位置および値から、二進数３２は６１４４〜６６５５の範囲に絞り込まれる。よって、数値変換部１２５は、十進数の桁［３］を６に決定する。
【００５２】
二進数３３は「０００１１０１０００００００００」である。数値変換部１２５は、二進数３３の最上位セットビットとそれに続く３ビットとを選択する。すると、二進数３３からは、二進数３１，３２と同様にビット［１２］，ビット［１１］，ビット［１０］，ビット［９］が選択される。選択される４ビットの値は「１１０１」である。選択された４ビットの位置および値から、二進数３３は６６５６〜７１６７の範囲に絞り込まれる。よって、数値変換部１２５は、十進数の桁［３］を６または７に決定する。二進数３３が６９９９以下であれば桁［３］＝６、７０００以上であれば桁［３］＝７である。
【００５３】
このように、数値変換部１２５は、二進数の連続する４ビットの位置と値から、十進数の１桁の位置と値を１通りまたは２通り（高々２通り）に絞り込むことができる。十進数の１桁の位置と値が２通り存在する場合、数値変換部１２５は、二進数と境界値とを比較することで何れか一方を選択することになる。上記の二進数３１の場合の境界値は５９９９であり、上記の二進数３３の場合の境界値は６９９９である。
【００５４】
ここで、数値変換部１２５が１回に選択するビットの数を３ビット以下にした場合、十進数の１桁の位置と値の候補が３通り以上になることがある。この場合、二進数と境界値とを比較して何れか１つの候補を選択する処理が複雑になる。一方、２のｎ乗（ｎは２以上の整数）が１０の倍数になることはないため、数値変換部１２５が１回に選択するビットの数を５ビット以上に増やしても、十進数の１桁の位置と値の候補は最大で２通りになってしまう。よって、数値変換部１２５は１回に４ビットを選択することが好ましい。
【００５５】
図６は、変換テーブルの例を示す図である。
変換テーブル１２７は、変換テーブル記憶部１２６に記憶されている。変換テーブル１２７は、ビット位置、インデックス、境界値、桁位置＃１、桁数値＃１、桁位置＃２、桁数値＃２、最小値および最大値の項目を有する。
【００５６】
ビット位置は、二進数における最上位セットビット（値が１である最も上位のビット）の位置を示す整数である。ＬＳＢのビット位置は０であり、ＭＳＢのビット位置は６３である。ただし、二進数からは４ビットずつ選択されるため、変換テーブル１２７におけるビット位置の最小値は３である。インデックスは、最上位セットビットに続く３ビットの値である。インデックスの最小値は０、最大値は７である。
【００５７】
境界値は、桁位置として桁位置＃１と桁位置＃２の何れが有効であるか、および、桁数値として桁数値＃１と桁数値＃２の何れが有効であるか判定するための閾値である。二進数全体と境界値とが比較される。二進数が境界値以下であれば、桁位置＃１と桁数値＃１が有効になる。二進数が境界値より大きければ、桁位置＃２と桁数値＃２が有効になる。なお、ビット位置とインデックスによって十進数の桁と値が１通りに決まる場合、境界値は所定の最大値としておく。例えば、境界値が符号なし６４ビット整数で表現される場合、その最大値である１８４４６７４４０７３７０９５５１６１５が境界値となる。その結果、桁位置＃１および桁数値＃１が有効になる。
【００５８】
桁位置＃１，＃２は、それぞれ十進数の桁の位置を示す整数である。最下位桁の桁位置＃１，＃２は０であり、最上位桁の桁位置＃１，＃２は１９である。桁数値＃１，＃２は、それぞれ十進数の１桁の値を示す整数である。４ビットのうちの先頭ビットが１であるため、桁数値＃１，＃２の最小値は０ではなく１である。桁数値＃１，＃２の最大値は９である。ビット位置とインデックスによって十進数の桁と値が１通りに決まる場合、桁位置＃１＝桁位置＃２かつ桁数値＃１＝桁数値＃２である。十進数の桁と値が１通りに決まらない場合、桁位置＃１＜桁位置＃２または桁数値＃１＜桁数値＃２である。
【００５９】
最小値は、ビット位置とインデックスの条件を満たす二進数の中で考え得る最小の整数である。最小値は、選択された４ビットに続く全てのビットが０であると仮定した場合の値である。最小値は、桁位置＃１および桁数値＃１に対応する。最大値は、ビット位置とインデックスの条件を満たす二進数の中で考え得る最大の整数である。最大値は、選択された４ビットに続く全てのビットが１であると仮定した場合の値である。最大値は、桁位置＃２および桁数値＃２に対応する。なお、最小値と最大値は参考情報であり、変換テーブル１２７に最小値と最大値が記載されていなくてもよい。
【００６０】
図７は、逆変換テーブルの例を示す図である。
逆変換テーブル１２８は、変換テーブル記憶部１２６に記憶されている。逆変換テーブル１２８は、桁位置、桁数値−１および二進数の項目を有する。
【００６１】
桁位置は、十進数の桁の位置を示す整数である。変換テーブル１２７と同様に、最下位桁の桁位置は０であり、最上位桁の桁位置は１９である。桁数値−１は、十進数の１桁の値から１を引いた整数である。桁数値−１の最小値は０、最大値は８である。二進数の項目には、桁位置が示す桁に桁数値が示す値（桁数値−１の項目に１を加えた値）が設定され、他の桁に０が設定された十進数に対応する二進数が登録される。
【００６２】
例えば、桁位置＝２，桁数値−１＝１の場合、十進数は２００になり、二進数は１１００１０００になる。また、例えば、桁位置＝３，桁数値−１＝５の場合、十進数は６０００になり、二進数は１０１１１０１１１００００になる。
【００６３】
図８は、二進数から十進数への変換例を示す図である。
数値変換部１２５は、上記の変換テーブル１２７と逆変換テーブル１２８を用いて、以下のように二進数を十進数に変換することができる。
【００６４】
二進数４１は「０…０１１０００００１１１０００」であり、十進表現の「０…０６２００」に相当する。最初に、数値変換部１２５は、各桁を０に初期化した十進数４２を生成しておく。数値変換部１２５は、ビット［６３］からビット［０］に向かって二進数４１を走査し、最上位セットビットを検出する。二進数４１の最上位セットビットはビット［１２］である。数値変換部１２５は、最上位セットビットとそれに続く３ビットとして、ビット［１２］，ビット［１１］，ビット［１０］，ビット［９］を選択する。
【００６５】
よって、ビット位置＝１２と算出される。また、ビット［１１］＝１，ビット［１０］＝０，ビット［９］＝０であるため、インデックス＝４と算出される。数値変換部１２５は、変換テーブル１２７からビット位置＝１２，インデックス＝４に対応する境界値を取得する。ここで取得される境界値は、所定の最大値（Ｍａｘ）である。数値変換部１２５は、二進数４１と境界値とを比較し、二進数４１が境界値以下であることを確認する。すると、数値変換部１２５は、変換テーブル１２７からビット位置＝１２，インデックス＝４に対応する桁位置＃１および桁数値＃１を取得する。図６に示すように、ここで取得される桁位置＃１は３、桁数値＃１は６である。
【００６６】
数値変換部１２５は、十進数４２の桁［３］を０から６に書き換えることで、十進数４４を生成する。また、数値変換部１２５は、逆変換テーブル１２８から、桁位置＝３，桁数値−１＝５に対応する二進数を取得する。ここで取得する二進数は、十進表現の６０００に対応するものであり、０…０１０１１１０１１１００００である。数値変換部１２５は、二進数４１からこの二進数を引いて二進数４３を生成する。
【００６７】
二進数４３は「０…００００００１１００１０００」であり、十進表現の「０…００２００」に相当する。次に、数値変換部１２５は、ビット［６３］からビット［０］に向かって二進数４３を走査し、最上位セットビットを検出する。二進数４３の最上位セットビットはビット［７］である。数値変換部１２５は、最上位セットビットとそれに続く３ビットとして、ビット［７］，ビット［６］，ビット［５］，ビット［４］を選択する。
【００６８】
よって、ビット位置＝７と算出される。また、ビット［６］＝１，ビット［５］＝０，ビット［４］＝０であるため、インデックス＝４と算出される。数値変換部１２５は、変換テーブル１２７からビット位置＝７，インデックス＝４に対応する境界値を取得する。ここで取得される境界値は１９９である。数値変換部１２５は、二進数４３と境界値とを比較し、二進数４３が境界値より大きいことを確認する。すると、数値変換部１２５は、変換テーブル１２７からビット位置＝７，インデックス＝４に対応する桁位置＃２および桁数値＃２を取得する。ここで取得される桁位置＃２は２、桁数値＃２は２である。
【００６９】
数値変換部１２５は、十進数４４の桁［２］を０から２に書き換えることで、十進数４６を生成する。また、数値変換部１２５は、逆変換テーブル１２８から、桁位置＝２，桁数値−１＝１に対応する二進数を取得する。ここで取得する二進数は、十進表現の２００に対応するものであり、０…００００００１１００１０００である。数値変換部１２５は、二進数４３からこの二進数を引いて二進数４５を生成する。
【００７０】
二進数４５は「０…００００００００００００００」であり、十進表現の「０…０００００」に相当する。変換すべき残りの数値が存在しないため、数値変換部１２５は、二進数から十進数への変換を終了する。これにより、二進数４１から十進数４６が得られる。十進数４６は「０…０６２００」であり、二進数４１に対応している。
【００７１】
ここで、変換テーブル１２７の参照、逆変換テーブル１２８の参照および二進数に対する減算はそれぞれ、十進数４６の非零の桁の数である２回だけ行われており、値が０の桁についてはこれらの処理がスキップされている。これは、二進数４１，４３において最上位セットビットが検索されており、０のビットがスキップされているためである。よって、十進数に変換したときに０の桁が多くなるような二進数について計算量を削減することができる。特に、下位の桁の値が連続して０になることが多い金額などの数値について、二進数から十進数への変換の計算量を大きく削減できる。
【００７２】
次に、情報処理装置１００の処理手順について説明する。
図９は、変換テーブル生成の手順例を示す図である。
変換テーブル１２７は、情報処理装置１００が生成することもできるし、予め他の装置が生成して情報処理装置１００に保存しておくこともできる。ここでは、数値変換部１２５が変換テーブル１２７を生成すると仮定して、生成方法の例を説明する。
【００７３】
（Ｓ１０）数値変換部１２５は、ビット位置ｂ＝３，インデックスｉ＝０に設定する。
（Ｓ１１）数値変換部１２５は、ビット位置ｂとインデックスｉから、最上位セットビットとそれに続く３ビットとを含む連続した４ビットおよびその値を特定する。
【００７４】
（Ｓ１２）数値変換部１２５は、ステップＳ１１で特定した４ビットより下位のビットの値が全て０であると仮定して、最小値Ｘを算出する。また、数値変換部１２５は、特定した４ビットより下位のビットの値が全て１であると仮定して、最大値Ｙを算出する。
【００７５】
（Ｓ１３）数値変換部１２５は、ステップＳ１２で算出した最小値Ｘを十進数に変換し、変換された十進数の中から最も上位の非零の桁とその値を特定する。数値変換部１２５は、特定した桁を桁位置＃１とし、特定した値を桁数値＃１とする。また、数値変換部１２５は、ステップＳ１２で算出した最大値Ｙを十進数に変換し、変換された十進数の中から最も上位の非零の桁とその値を特定する。数値変換部１２５は、特定した桁を桁位置＃２とし、特定した値を桁数値＃２とする。なお、最小値Ｘおよび最大値Ｙを十進数に変換する方法としては、前述の単純なアルゴリズムなど任意の方法を使用してよい。
【００７６】
（Ｓ１４）数値変換部１２５は、ステップＳ１３で特定した桁位置＃１と桁位置＃２が一致し、かつ、桁数値＃１と桁数値＃２が一致するか判断する。この条件を満たす場合はステップＳ１５に処理が進み、それ以外の場合はステップＳ１６に処理が進む。
【００７７】
（Ｓ１５）数値変換部１２５は、データ型の最大値（例えば、１８４４６７４４０７３７０９５５１６１５）を境界値とする。そして、ステップＳ１７に処理が進む。
（Ｓ１６）数値変換部１２５は、桁数値＃１の値が桁数値＃１であり、それより下位の桁の値が全て９である十進数を生成する。数値変換部１２５は、生成した十進数を二進数に変換し、変換された二進数を境界値とする。
【００７８】
（Ｓ１７）数値変換部１２５は、インデックスｉに１を加える。
（Ｓ１８）数値変換部１２５は、インデックスｉが８未満であるか判断する。インデックスｉが８未満である場合、ステップＳ１１に処理が進む。インデックスｉが８である場合、ステップＳ１９に処理が進む。
【００７９】
（Ｓ１９）数値変換部１２５は、ビット位置ｂに１を加える。また、数値変換部１２５は、インデックスｉを０に初期化する。
（Ｓ２０）数値変換部１２５は、ビット位置ｂが６４未満であるか判断する。ビット位置ｂが６４未満である場合、ステップＳ１１に処理が進む。ビット位置ｂが６４である場合、変換テーブル生成の処理が終了する。
【００８０】
図１０は、二進十進変換の手順例を示す図である。
（Ｓ３０）数値変換部１２５は、変換すべき二進数ｘが十進表現の１０（二進表現の１０１０）未満であるか判断する。二進数ｘが１０未満である場合、ステップＳ４０に処理が進む。二進数ｘが１０以上である場合、ステップＳ３１に処理が進む。
【００８１】
（Ｓ３１）数値変換部１２５は、二進数ｘの最上位セットビットｍｓ１ｂｉｔ＿ｐｏｓを特定する。最上位セットビットｍｓ１ｂｉｔ＿ｐｏｓを特定する方法としては、ＣＰＵ１０１のプロセッサアーキテクチャに応じて様々な方法が考えられる。
【００８２】
例えば、最上位セットビットの位置を算出する命令をＣＰＵ１０１がサポートしている場合、数値変換部１２５は、当該命令の実行結果を最上位セットビットｍｓ１ｂｉｔ＿ｐｏｓとして用いることができる。この命令はＢＳＲ（Bit Scan Reverse）命令と言うことがある。また、例えば、ＭＳＢからＬＳＢに向かって連続する０の数をカウントする命令をＣＰＵ１０１がサポートしている場合、数値変換部１２５は、６３から当該命令の実行結果を引くことで最上位セットビットｍｓ１ｂｉｔ＿ｐｏｓを特定することができる。この命令はＣＬＺ（Count Leading Zeros）命令と言うことがある。また、例えば、整数から浮動小数点数に変換する命令をＣＰＵ１０１がサポートしている場合、数値変換部１２５は、二進数ｘを浮動小数点数に変換し、浮動小数点数の指数部を最上位セットビットｍｓ１ｂｉｔ＿ｐｏｓとして用いることができる。
【００８３】
（Ｓ３２）数値変換部１２５は、二進数ｘから、ステップＳ３１で特定した最上位セットビットｍｓ１ｂｉｔ＿ｐｏｓに続く３ビットを選択し、選択した３ビットの値からインデックスｉｎｄｅｘ＿ｆｉｅｌｄを特定する。
【００８４】
（Ｓ３３）数値変換部１２５は、ステップＳ３１で特定した最上位セットビットｍｓ１ｂｉｔ＿ｐｏｓとステップＳ３２で特定したインデックスｉｎｄｅｘ＿ｆｉｅｌｄを用いて、変換テーブル１２７を検索し境界値を取得する。
【００８５】
（Ｓ３４）数値変換部１２５は、二進数ｘとステップＳ３３で取得した境界値を比較し、二進数ｘが境界値以下であるか判断する。二進数ｘが境界値以下である場合、ステップＳ３５に処理が進む。二進数ｘが境界値より大きい場合、ステップＳ３６に処理が進む。
【００８６】
（Ｓ３５）数値変換部１２５は、最上位セットビットｍｓ１ｂｉｔ＿ｐｏｓとインデックスｉｎｄｅｘ＿ｆｉｅｌｄに対応する桁位置＃１と桁数値＃１を、変換テーブル１２７から取得する。桁位置ｐｏｓ＝桁位置＃１とし、桁数値ｄｉｇｉｔ＝桁数値＃１とする。そして、ステップＳ３７に処理が進む。
【００８７】
（Ｓ３６）数値変換部１２５は、最上位セットビットｍｓ１ｂｉｔ＿ｐｏｓとインデックスｉｎｄｅｘ＿ｆｉｅｌｄに対応する桁位置＃２と桁数値＃２を、変換テーブル１２７から取得する。桁位置ｐｏｓ＝桁位置＃２とし、桁数値ｄｉｇｉｔ＝桁数値＃２とする。
【００８８】
（Ｓ３７）数値変換部１２５は、十進数において桁位置ｐｏｓの値を桁数値ｄｉｇｉｔに決定する。すなわち、数値変換部１２５は、ステップＳ３５またはステップＳ３６で取得した桁位置ｐｏｓと桁数値ｄｉｇｉｔを用いて、桁［ｐｏｓ］＝ｄｉｇｉｔとする。
【００８９】
（Ｓ３８）数値変換部１２５は、桁数値ｄｉｇｉｔから１を引いたｄｉｇｉｔ−１を算出する。数値変換部１２５は、桁位置ｐｏｓと算出したｄｉｇｉｔ−１を用いて、逆変換テーブル１２８を検索し二進数を取得する。
【００９０】
（Ｓ３９）数値変換部１２５は、二進数ｘからステップＳ３８で取得した二進数、すなわち、ステップＳ３７で決定した十進数の桁に相当する二進数を引く。これにより、未決定の十進数の桁に相当する値が二進数ｘに残る。そして、ステップＳ３０に処理が進む。
【００９１】
（Ｓ４０）数値変換部１２５は、十進数の桁［０］の値をｘに決定する。これにより、十進数の全ての桁の値が確定する。なお、十進数の各桁の初期値は０である。
図１１は、二進十進変換のプログラム例を示す図である。
【００９２】
プログラム５１は、図１０のフローチャートの実装例である。
プログラム５１では、逆変換テーブル１２８が、大きさ２０×９の二次元配列ｒｏｕｎｄ＿ｄｅｃｉｍａｌ＿ｎｕｍｂｅｒｓ［２０］［９］に格納されている。逆変換テーブル１２８に含まれる二進数は、符号なし６４ビット整数で表される。また、プログラム５１では、変換テーブル１２７が、大きさ６４×８の二次元配列ｃｏｎｖｅｒｔ＿２＿ｔｏ＿１０＿ｔａｂｌｅ［６４］［８］に格納されている。変換テーブル１２７に含まれる境界値は、符号なし６４ビット整数で表される。変換テーブル１２７に含まれる桁位置＃１，＃２および桁数値＃１，＃２はそれぞれ、符号なし８ビット整数で表される。
【００９３】
また、変換すべき二進数ｘが符号なし６４ビット整数で表される。また、プログラム５１では、変換された十進数が、大きさ２０の配列ｒｅｓｕｌｔｓ［２０］に格納されている。十進数の１桁は、符号なし８ビット整数で表される。ただし、プログラム５１では、二次元配列ｒｏｕｎｄ＿ｄｅｃｉｍａｌ＿ｎｕｍｂｅｒｓ［２０］［９］に逆変換テーブル１２８の内容を読み込む処理は省略している。また、二次元配列ｃｏｎｖｅｒｔ＿２＿ｔｏ＿１０＿ｔａｂｌｅ［６４］［８］に変換テーブル１２７の内容を読み込む処理は省略している。また、配列ｒｅｓｕｌｔｓ［２０］を０に初期化する処理も省略している。
【００９４】
また、プログラム５１では、ＣＬＺ命令を発行する組み込み関数を利用して、二進数ｘの最上位セットビットを算出している。また、プログラム５１では、右シフト演算と論理積を用いてインデックスｉｎｄｅｘ＿ｆｉｅｌｄを抽出している。また、プログラム５１では、二進数ｘが境界値以下であればｐａｔｔｅｒｎ＝０、二進数ｘが境界値より大きければｐａｔｔｅｒｎ＝１とし、ｐａｔｔｅｒｎを添字として用いて桁位置＃１，＃２の一方と桁数値＃１，＃２の一方を選択している。
【００９５】
第２の実施の形態の情報処理装置１００によれば、二進数を十進数に変換するとき、十進数の上位桁から下位桁に向かって１桁ずつ決定できる。そのとき、十進数の非零の桁について変換処理を行えばよく、０の桁については変換処理をスキップできる。よって、二進数から十進数への変換の計算量を削減できる。特に、０の桁が多くなるような金額などの数値について計算量を大きく削減できる。また、変換テーブル１２７により、二進数の４ビットの位置と値から十進数の１桁の位置と値を特定できる。これにより、３ビット以下のビット列を用いる場合よりも、十進数の１桁の位置と値の候補を十分に絞り込むことができ、計算の複雑性を低減できる。また、５ビット以上のビット列を用いる場合よりも、変換テーブル１２７のサイズを小さくすることができる。
【００９６】
なお、前述のように、第１の実施の形態の情報処理は、情報処理装置１０にプログラムを実行させることで実現できる。第２の実施の形態の情報処理は、情報処理装置１００にプログラムを実行させることで実現できる。
【００９７】
プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体１１３）に記録しておくことができる。記録媒体として、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体から他の記録媒体（例えば、ＨＤＤ１０３）にプログラムをコピーして実行してもよい。
【符号の説明】
【００９８】
１０  情報処理装置
１１  記憶部
１２  変換部
１３  変換情報
１４  二進数データ
１５  十進数データ
【図１】
2017122951.tif 000003
【図２】
2017122951.tif 000004
【図３】
2017122951.tif 000005
【図４】
2017122951.tif 000006
【図５】
2017122951.tif 000007
【図６】
2017122951.tif 000008
【図７】
2017122951.tif 000009
【図８】
2017122951.tif 000010
【図９】
2017122951.tif 000011
【図１０】
2017122951.tif 000012
【図１１】
2017122951.tif 000013