Warning: Undefined variable $type in /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php on line 3

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /home/users/1/sub.jp-asate/web/wiki/includes/json/FormatJson.php on line 297

Warning: Trying to access array offset on value of type bool in /home/users/1/sub.jp-asate/web/wiki/includes/Setup.php on line 660

Warning: session_name(): Session name cannot be changed after headers have already been sent in /home/users/1/sub.jp-asate/web/wiki/includes/Setup.php on line 834

Warning: ini_set(): Session ini settings cannot be changed after headers have already been sent in /home/users/1/sub.jp-asate/web/wiki/includes/session/PHPSessionHandler.php on line 126

Warning: ini_set(): Session ini settings cannot be changed after headers have already been sent in /home/users/1/sub.jp-asate/web/wiki/includes/session/PHPSessionHandler.php on line 127

Warning: session_cache_limiter(): Session cache limiter cannot be changed after headers have already been sent in /home/users/1/sub.jp-asate/web/wiki/includes/session/PHPSessionHandler.php on line 133

Warning: session_set_save_handler(): Session save handler cannot be changed after headers have already been sent in /home/users/1/sub.jp-asate/web/wiki/includes/session/PHPSessionHandler.php on line 140

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /home/users/1/sub.jp-asate/web/wiki/languages/LanguageConverter.php on line 773

Warning: Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/Feed.php on line 294

Warning: Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/Feed.php on line 300

Warning: Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/WebResponse.php on line 46

Warning: Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/WebResponse.php on line 46

Warning: Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/WebResponse.php on line 46
https:///mymemo.xyz/wiki/api.php?action=feedcontributions&user=126.144.32.167&feedformat=atom miniwiki - 利用者の投稿記録 [ja] 2024-05-05T01:44:14Z 利用者の投稿記録 MediaWiki 1.31.0 二進化十進表現 2017-03-21T12:25:00Z <p>126.144.32.167: /* 関連項目 */</p> <hr /> <div>{{Redirect|BCD|Windows OSのブート構成データ|Windows Boot Manager}}<br /> &#039;&#039;&#039;二進化十進数&#039;&#039;&#039; (&#039;&#039;&#039;BCD&#039;&#039;&#039;、&#039;&#039;Binary-coded decimal&#039;&#039; ) とは、[[コンピュータの数値表現|コンピュータにおける数値の表現]]方式の一つで、[[十進法]]の1桁を、0から9までを表す[[二進法]]の4桁で表したものである。「二進化十進符号」などとも呼ばれる。[[3増し符号]]など同じ目的の他の方式や、より一般的に、十進3桁を10ビットで表現する[[Densely packed decimal]]なども含めることもある。<br /> <br /> == 概要 ==<br /> 一般に二進法の4桁([[ニブル]])は、0から15までの整数を表すことができる。二進化十進法ではこのうちの最初の10個を有効な数値として扱う。<br /> <br /> {| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align:center&quot;<br /> ! 十進法!! BCD表現<br /> |-<br /> | 0|| 0000<br /> |-<br /> | 1|| 0001<br /> |-<br /> | 2|| 0010<br /> |-<br /> | 3|| 0011<br /> |-<br /> | 4|| 0100<br /> |-<br /> | 5|| 0101<br /> |-<br /> | 6|| 0110<br /> |-<br /> | 7|| 0111<br /> |-<br /> | 8|| 1000<br /> |-<br /> | 9|| 1001<br /> |}<br /> <br /> 例えば、127 という整数値は、 0001、0010、0111 という3つのBCDで表される。<br /> <br /> 二進化十進数には、ゾーン形式とパック形式があり、用途に応じて使い分けられる。<br /> <br /> 符号部を持たないパック形式では、ファイルなどの中の二進化十進数値を[[十六進法]]で表示すると十進と同じように表示される。例えば、十六進で「1234」と表示されるデータは、整数値 1234 のことである。また、機種や文字コードに依存するものの、一般にゾーン形式では8[[ビット]]文字表示すると十進と同じように表示される。ただし、符号部を持つ場合も多く、上記の表示が必ずしもわかりやすいとは言えないこともある。<br /> <br /> 簡単な利用法としては、[[電子回路]]上で、0 - 9を表示可能なBCD対応の数字表示素子1つに対してBCDの4桁を4本の入力信号として直接入力する、等の使われ方がある。二進法で扱う場合と違い、表示素子に入力する前の変換が要らずデータバス上の信号をそのまま利用できるというメリットがある。<br /> <br /> 二進法で計算を行う多くのコンピュータでは、二進化十進表現を使用する機能(または、計算結果を補正するための機能)を備えている。&lt;!-- [[メインフレーム]]、例えば[[日本電気|NEC]]の[[ACOS-6]]シリーズなどの大型のコンピュータに使用されるプロセッサでは、BCDを直接処理できる機械語命令を備え、事務処理演算の効率化を図っており、また、小型のコンピュータでも、この補正の処理を簡単にする命令を備えることも少なくない。BCDで数値の正負を扱う必要がある場合には、その絶対値とは別の領域に符号を格納することで表現する。例えば、[[インテル]]の32ビット・[[コンピュータ・アーキテクチャ|アーキテクチャ]]「[[IA-32]]」で使用される「80ビット・パックドBCD整数」では、先頭から72番目までのビットで18桁の十進数を表し、末尾の80番目のビットに符号を格納している。←左記が代表例といえるのか疑問です。また、個々の製品のアーキテクチャまで書く必要があるか? --&gt;<br /> <br /> 本来、コンピュータでは二進法で演算するのがコンピュータ資源(レジスタ、メモリ、計算量)の有効利用になる。それでも二進化十進数が有効な場合があるのは、二進法と十進法との変換を回避することに「社会的な価値」があるからである。つまり二進化十進数は純粋なコンピュータの問題ではなく、十進法社会という現実からの要請による。&lt;!--コンピュータの能力が上がれば上がるほど、十進法への変換を必要としないというメリットより、数値どうしの演算に手間がかかるというデメリットのほうが大きくなり、計算には二進法を使ったほうがよくなる。--&gt;&lt;!--コンピュータの能力が上がるほど、少々数値どうしの演算に手間が掛かっても問題ない、という理屈も成り立つ。この文が論の立て方がおかしい--&gt;<br /> <br /> 「社会的な価値」の具体例として、小数の[[端数処理|丸め処理]]が挙げられる。0.1 のような値は十進法では有限桁で表記可能だが、二進法では無限桁の[[循環小数]]となる。このため、&lt;!--入力値が&#039;&#039;十進数表現で有限桁の小数&#039;&#039;で定義されている場合に、二進数表現で丸め誤差を考慮せずに計算を進めると、十進数での演算では発生しなかった誤差が蓄積される可能性がある。--&gt;一般的な[[二進法]]の[[浮動小数点数]]演算では 0.1 の表現に丸め誤差があるので、それを繰り返し足し込むと誤差の影響が無視できなくなることがある。例えば以下の [[Java]] プログラムを実行すると、double 型を使って 0.1 を 10,000 回加えた結果は 1,000.0 ではなく 1,000.0000000001588 となることがわかる。<br /> <br /> &lt;syntaxhighlight lang=&quot;java&quot;&gt;public static void main(String[] args) {<br /> double sum = 0.0;<br /> for (int i = 0; i &lt; 10000; i++)<br /> sum += 0.1;<br /> System.out.println(&quot;sum = &quot; + sum);<br /> }&lt;/syntaxhighlight&gt;<br /> <br /> このような問題を避けるため&#039;&#039;、処理対象の値が十進の場合は、コンピュータ内の処理も二進化十進数で実装されることが少なくない。[[通貨]]を扱う事務アプリケーションなどが、しばしばこのケースに該当する。<br /> <br /> なお、10.0 / 3.0 を計算する時には全く何も変わらない同様の問題を十進でも抱えている。このようなケースでは、二進化十進数でも正確に表す事はできない。<br /> <br /> [[デジュリスタンダード|デ=ジュレ標準]]による標準化の要請が根強く存在していることもあって、[[浮動小数点数|浮動小数点表現]]の標準である[[IEEE 754]]に2008年の改訂で十進浮動小数点が追加された。これには、より効率の良い [[Densely packed decimal]](DPD)方式が採用された。<br /> <br /> == 関連項目 ==<br /> * [[IBM 1401#BCDアーキテクチャ|IBM 1401]] - BCDコード(二進化十進表現)を初めて用いたシステム<br /> * [[パック10進数]]<br /> * [[アンパック10進数]](ゾーン10進数)<br /> * [[3増し符号]]<br /> * [[二五進法]]<br /> * [[固定小数点数#固定小数点数の精度|固定小数点数]]<br /> * [[COBOL]]<br /> * [[MSX-BASIC]]<br /> * [[FP-1000]]<br /> * [[EBCDIC]] - BCDを拡張した[[IBM]]の文字コード<br /> * [[バイナリエディタ]]<br /> <br /> {{DEFAULTSORT:にしんかしゆつしんひようけん}}<br /> <br /> [[Category:コンピュータのデータ]]<br /> [[Category:コンピュータの算術]]<br /> [[Category:数の表現]]<br /> [[Category:数学に関する記事]]</div> 126.144.32.167
Warning: Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/WebResponse.php on line 46