![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?08b1c8b)
No.1ベストアンサー
- 回答日時:
2進法とは(16進表現)
0,1,2,3,....8,9,A,B,C,D,F
10,11,12,13,.....18,19,1A,1B,1C,1D,1F
20,21,22,23,....
となっていきますが、整数の場合はよいですが、小数になると、2進数で表せない10進数が出てきます。このために、9のつぎは2進数でも10にするのです。
0,1,2,3,.......8,9
10,11,12,...18,19
20,21,22,...28,29
.........
COBOLなど金銭を取り扱うソフトはBCDを使ってあります。
C,C++などでもBCDを使えるようになっているようです。
10進数の0.1を10回足すと1.0になりますが、2進数ではなりません。0.1を2進数では表せないのです。普通、コンピュータの内部では2進計算ですから、
2進数では(カッコ内は10進数)
1を2で割ると・・・・・0.1(0.5)
0.1を2で割ると・・・・0.01(0.25)
0.01・・・・・・・・・・・・・0.001(0.125)
0.001・・・・・・・・・・・・0.0001(0.0625)
・・・・・・
10進数の0.1を2進数で表すことが出来ません。
FOR i=1 TO 20
S=S+0.1
IF S=1.0 THEN PRINT"OK"
NEXT i
このようなプログラムではOKは表示されません。
2000年問題は、メモリの節約のために、下2桁しか使用していなかったために、99に1を足して、100になる1のメモリがありませんから、下2桁の00しか表示されなくて、1900年と認識してしまうために、計算を間違ってしまうのでした、今年は9月問題がありますが、どうなるでしょうか?2001年9月8日問題です。gooで、キーワード「9月」で検索して見て下さい。
長くなりすぎました。後の方の補足を期待して!
お礼がおくれましたが、どうもありがとうございました。
2進数は少数に弱いんですね。
そして
「9月8日」問題、さっそく調べさせていただきます!
No.4
- 回答日時:
簡略に説明して欲しいと言うことなので、ごく簡略に。
2進法なら2000は11111010000で表します。(11ビット)
実際には16ビットで0000011111010000で扱います。
2進法はコンピュータの計算に都合がいいのです。
実際には2進法は
(1)人間に判りにくい。
(2)画面に表示したり、印刷したりするのに10進法に直さなければならない。
という欠点が有るため、10進と2進の中間の記憶形式を取ります。
これが2進化10進数(BCD:10進数の1桁づつをそれぞれ2進で表す)です。99は1001 1001のごとくです。(4ビット表示)
先の方が言われている通り、BCDの世界は乱れていて、4ビット形式、8ビット形式、符号の有り無しなど統一されていません。
2000年問題に限って言えば、BCDとは言っても下2桁を8ビットの文字コード(ASCII)2桁でファイルに保持していたといえるでしょう。
1999年は99しか持っていませんから1を足すと00(100では有りません)。従って2000年でなく1900年に戻ってしまいます。
正確でないのを承知でわかりやすく言うと2000年対策というのは先に1900を足してから1を足せば(99+1900+1)で正しい2000年が得られるということなのですね。
簡略とはいえなかったですね。(^^;;
No.3
- 回答日時:
われわれが普段使っているのが10進数であることと、コンピュータ内部では2進数を使っていることはご承知だと思います。
そこでわれわれが使っている10進数をコンピュータが使う2進数に直すこと、またその逆を考えなければなりません。その方法が2通りあるということです。
1つ目のBCDですが2進数は、4桁(4bit)で10進数の0から15までを表せますので、このうち0から9までを使って10進数の1桁を表す方法です。つまり、1バイト(8bit)で10進数の2桁を表すことができます。
さてここで、プログラムの書き方ですが、年を表すのにデータ容量をケチって1バイトで表すと、プログラム上で
BCD 表す年
00→1900年
99→1999年
とするのが簡単でいいですね。すると、2000年を表す方法がありませんので2000年問題となるわけです。
さて、バイナリ値ですが、上記と同じ1バイト(8bit)で年を表すとすると、2進数8桁は10進数で0から255まで表すことができることになります。(2000年を正確にに表現しようとすると2進数11桁で、0から2047まで表せますので2バイト以上あればもっといいことになります)
さてプログラムでは、
バイナリ 表す年
0 →1900年
99 →1999年
100 →2000年
255 →2155年
となりますので、2000年を正確に表すことができることになります。(もちろん、バイナリ値0を1900年とするという前提ですが・・・)つまり、2000年問題は起こらないということになります。
brogieさんも書いておられますが、昔はよくBCDを使っていたので(バイナリ→10進変換のプログラムの容量すら削減したかった)その当時のプログラムを使っていると問題が起こることになりますね(実際、私も昔遊びで作っていたプログラムはBCDを使って計算していました。)
No.2
- 回答日時:
昔のコンピュータ(といっても元祖のENIACは10進計算なので除外)は“数値計算”だけを目的としていました。
10進数を2進数にすると…
0 - 0000
1 - 0001
2 - 0010
....
7 - 0111
8 - 1000
9 - 1001
コレに符号(+と-)を加えたものを2進化10進数(Binary Coded Decimal=BCD)と呼んでいました。
その後、コンピュータで英文字を使う必要が出てきたので全体を8bitに拡張して文字と数字を表せるようになりました。
コレを拡張2進化10進コード(Extended Binary Coded Decimal Interchange Code=EBCDIC)と呼び、数字の場合BCDの値(0000~1001)は下位bitに、上位は16進のF(1111)をつけて表します。
結果、EBCDICにおける数値はF0(11110000)~F9(11111001)となります。
その後、標準コードとして制定されたASCIIコード(ASCIIを元に制定されたJISを含めて考えてください)では数字の上位を3として30(00110000)~39(00111001)となっています。
現在BCDというと1桁4bit(Pack),1桁8bitでEBCDIC(ZoneまたはUnpack),1桁8bitでASCII(ZoneまたはUnpack)の3種類があるので気をつけてください。
コレに対して数値(数字で無い事に注意)は8bitで00(00000000)~FF(11111111,10進では255)を表す事が出来ます。
10進整数99を2バイトで表現する場合を比較すると(数字はZoneでASCII)
数字=3939(00111001 00111001)
数値=0063(00000000 01100011)
となります。
数字表現では1バイトで0~9しか表現できない為、2バイトで0~99が表現できます。
結果、99+1は100(3バイト必要)となり、けた上がりした最上位1桁が失われます(桁あふれ)。
対して、数値表現は2バイトで0~65536が表現可能です。
こちらは99+1=100でも2バイトで表現が可能です。
最後に、以上の説明はかなり乱暴です。
・1バイト=8ビットを仮定している
・符号を考慮していない
・BCDの解説が大雑把すぎて正確でない
etc...
正確な解説は書籍を参照して下さい。
回答どうもありがとうございました!
コードについての解説が
私にとっては少々難しかったのですが、
おおまかなコードの流れがよくわかりました!
書籍等もいろいろ読みつつ私も自分自身のレベル
をあげていきたいです。
どうもでした!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 大学受験 国立受験 11月からの大逆転劇を起こすには 7 2022/11/14 19:24
- その他(データベース) 4進数風なバーコードは何ですか? 2 2022/11/28 23:33
- 経済学 マクロ経済学で政府支出が変化した場合に図示する方法について教えてください。 6 2022/11/23 18:48
- 労働相談 合意済み仕様の商品納入後における仕様変更要求への対応について 5 2023/04/19 09:41
- 法学 刑法と社会について 2 2022/07/31 01:38
- 大学受験 娘の大学受験勉強 6 2022/06/30 19:58
- 高校 三次関数のグラフにつきまして 3 2022/05/15 11:14
- 知人・隣人 就活勤務地迷ってます 私は現在オーストラリアの大学に通ってる就活生です 高校もオーストラリアの高校に 7 2022/11/08 02:14
- Illustrator(イラストレーター) アイビスペイント、原稿作成について 1 2023/07/14 03:01
- 宅地建物取引主任者(宅建) 未経験・知識ゼロからの宅建取引士勉強方法について 2 2022/06/10 14:38
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】大変な警告
【大喜利】「今このパソコンは大変危険な状態です」という警告メッセージを無視してパソコンを開いたら、こんなことが起こった
-
何回やってもうまくいかないことは?
みなさんには、何回やってもうまくいかないことはありますか?
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
今から楽しみな予定はありますか?
いよいよ2025年が始まりました。皆さんには、今から楽しみにしている予定はありますか?
-
シーケンサー入力で装置でよくBCDコード1248と言いますが。
その他(自然科学)
-
BCDについて
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
memcmp バイナリデータの比較方法
-
エクセルシート名の制限を変更...
-
VBでShift_JISへurlエンコード...
-
バイト列とバイナリ列の違いが...
-
COBOLのCOMP形式について
-
【VB2005】テキストボックス内...
-
ビットスワップとバイトスワッ...
-
リトルエンディアンのデータを...
-
UTF-8で5~6バイトになる文字コ...
-
なんで外国人の書く顔文字は横...
-
「1TB」のHDDに日本語は何字入...
-
ピクセル,dpiから容量(バイト...
-
COBOLで変数が何文字で宣言され...
-
sedコマンドで全ての2バイト文...
-
2バイト文字の判定はString#get...
-
機種依存文字をチェックしたい。
-
Excel 1セル当りの文字数が2...
-
stable diffusionのエラー
-
Excel VBA メール作成について ...
-
C言語でwin32apiを使ってnotepa...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルシート名の制限を変更...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
機種依存文字をチェックしたい。
-
バイト列とバイナリ列の違いが...
-
ピクセル,dpiから容量(バイト...
-
SQLで1バイト、2バイト混在...
-
「1TB」のHDDに日本語は何字入...
-
64bit対応
-
VBAでShift-JISのURLエンコード
-
Javaで日本語1文字のバイト数
-
ビットスワップとバイトスワッ...
-
3バイト文字(UTF-8)をprintfで...
-
【VB2005】テキストボックス内...
-
バイナリとBCDコード
-
この関数はどのプログラミング...
-
URLは最高何文字まで可能なので...
-
VB.NET LeftBの代用
おすすめ情報