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も見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
あなたは何にトキメキますか?
「きゅんとした〜♪」 と思う瞬間ってありますよね。 それは恋愛だったり、推し活だったり、映画のワンシーンだったり……。
-
高校三年生の合唱祭で何を歌いましたか?
大人になると大人数で合唱する機会ってないですよね。 思い出すと、高校三年生の合唱祭が最後でした。 そこで、みんなの思い出の合唱曲を知りたい!
-
BCDについて
C言語・C++・C#
-
10進数をBCDに変換する方法
その他(プログラミング・Web制作)
-
シーケンサー入力で装置でよくBCDコード1248と言いますが。
その他(自然科学)
-
-
4
BCD出力で表示されたものをBINに変換すると
その他(コンピューター・テクノロジー)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルシート名の制限を変更...
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
char str[256]の256の意味は?
-
URLは最高何文字まで可能なので...
-
COBOLのCOMP形式について
-
VBAでUnicodeしか存在しない文...
-
バイト列とバイナリ列の違いが...
-
VB2008 2バイト文字の化け字...
-
お世話になってます。HTMLのTEX...
-
C++ Builderで文字列をバイトに...
-
Javaで日本語1文字のバイト数
-
“半角カタカナ”は、ずいぶん昔...
-
iconv変換後のサイズについて
-
UTF-8とUTF-16およびUTF-32につ...
-
1KBが1024byteな理由
-
機種依存文字をチェックしたい。
-
100MB
-
ワイド文字のバイト数が取得で...
-
文字のバイト数を数えるには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルシート名の制限を変更...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
バイト列とバイナリ列の違いが...
-
ピクセル,dpiから容量(バイト...
-
「1TB」のHDDに日本語は何字入...
-
Javaで日本語1文字のバイト数
-
機種依存文字をチェックしたい。
-
【VB2005】テキストボックス内...
-
PICマイコンで変数値の保持
-
ビットスワップとバイトスワッ...
-
SQLで1バイト、2バイト混在...
-
VBAでShift-JISのURLエンコード
-
GetWindowTextでアドレスバーか...
-
C++ Builderで文字列をバイトに...
-
64bit対応
-
UCS-2の一覧表が欲しい
-
日付時刻を4バイトに
おすすめ情報