- ベストアンサー
2バイトって何文字分ですか?
記憶容量のことで、お聞きします。1biteは、8bitっていうことは、雑誌などで読んで知っているのですが、イメージが湧きません。 日本語は2バイト必要だといわれていますが、1バイトでもしくは、2バイトで何文字分の保存が可能ですか?2バイトで、日本語すべての文字の保存が可能ですか? 2HDFDは、1.44MBっていうのが、多いようですが、最大何文字保存可能なんでしょうか?どなたか、よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>1バイトでもしくは、2バイトで何文字分の保存が可能ですか?2バイトで、日本語すべての文字の保存が可能ですか? というご質問ですが, 1または0を並べたものをビット列といいます。 理論上は1バイトのビット列ですと2^8(2の8乗をこう表すことにします)=256通りの文字が表せます。 したがって,アルファベットの大小52文字は余裕で表せますね。 ただ,実際には256通りのビット列全てが文字に割り当てられるわけではありません。 「カーソルを次の行に送る」とか「ファイルの内容がここで終了する」だとか,いろいろな「業務用」の指示もビット列で表さないといけません。 このような「業務用」(人間のためではなくコンピュータが何か仕事をする都合上のこと,ぐらいに思ってください)に使われるビット列(に対応する命令)を「制御文字」といいます。 00000000から11111111までの256通り……のように2進数で書いていると分かりにくいでしょうから,10進数に翻訳しますと,0~255の256通りのうち,0~31までと127が制御文字に割り当てられています。 また32はスペース,128~160と255も制御文字に準じる場所,となっていますので,結局これらを除くと,実際に本物の文字に割り当てられるのは33~126までの94箇所と,161~254までの94箇所,あわせて188文字分となります。 どのビット列にどの文字を割り当てるか,という体系のことを「文字コード」といいます。 No.3の回答で「たとえば 00000001 なら A ということにする」というのは一つの文字コードです。 実際にパソコンで広く使われている文字コード体系では,01000001をA,01000010をB……というふうに決めています(アスキーコード)。大型計算機などではこれと違ったコードのものもあります。 また,128~160にも文字を割り当ててしまっていることもあります。 日本語は,使用する文字の種類が多いので,1バイトでは足りません。そこで2バイト使うことにしました。 たとえば,「亜」なら0011 0000 0010 0001(見やすいように4桁ごとに区切りました)のようになります。 2バイトですと,理論上は2^16=65536通りの文字が表せそうですが,実際にはいろいろな制約により,94×94=8836通りのビット列に対して文字が割り当てられています。 これに対して,これではせっかくの16ビットの空間がもったいない,フルに使おう,ということで一部を除いてめいっぱい文字を割り当てたのがユニコードと呼ばれる体系です。 この方式ですと,65536通りのビット組合せのうち,先頭の32通りは制御文字とし,残りを目一杯使いますので,最大で65520通りの文字が表せます。 >日本語すべての文字の保存が可能ですか? これは大変回答が難しい質問です。なぜなら,「同じ文字とは何か」の定義がはっきりしない,というか人によって違うからです。 日本の文字コードを決めているJIS規格では,「包摂基準」というものを設け,たとえばしんにゅう(込とか進とかの部首)の点が一つの文字と二つの文字とは,文字コードとしては区別しない,としています。 活字で印刷する時は通常,いわゆる旧字体は点2つ,常用漢字体は点1つ,ですが,この区別はJISコードとしては行なわない,というわけです。 それで構わないという人はそれでいいでしょうが,それで困るという人にとっては「JISでは表せない文字がある」ということになります。 また,そういったレベルの話は別にしても,JIS規格には,あまり使われない文字は入っていませんので(日常生活にはほぼ十分ですが),「すべての文字」というわけにはいかないと思います。 なお,文字コードの話は,厳密に述べようと思うとかなり大変ですので,詳しい説明は専門書に譲ります。 フロッピーの記憶容量については既出の回答でおわかりと思います。
その他の回答 (4)
- Spur
- ベストアンサー率25% (453/1783)
No.2のSpurです。 他の方へのお礼の中に追加質問がありましたので、分かり範囲でお答えします。 >半角カタカナは1byteなんですか? 1byteです。 つまり、横が8ドットで縦が16ドットまたは24ドットで表現されている文字が1bytesで、縦横ともの16ドットまたは24ドットで表現されている文字が2bytesコードを使っているわけです。 これでお分かりかと思いますが、横のドット数が8bitsなら1byte、16bitsなら2bytesコードということですね。 >ユニコードという体系は、現時点でかなり使われているものなのですか? 実際にはあまり使われていないようです。 しかし、漢字コード体系には色々な種類があり、統一性も無いのでUNIコードを使おうと宣伝された時代もあったのですが、あまり実用にはなっていないですね。 UNIコードでなければならないような致命的な不具合があるわけでもないというのも理由かな? でも、工業界では結構使われています。 たくさんの文字が定義できますので、言い換えれば、1つの体系で、日本語・中国語・韓国語・ドイツ語など複数の特有の文字を表せます。 ですから、言語によってコードを切り換えなくても良いですから、「多国語対応」にするには便利です。
お礼
他の人に宛てた質問なのに、ご返事ありがとうございます。 いろいろと、なぞが解けてきました!! また、いろいろ質問させていただくことが、あるかと思いますがよろしくお願いします。
- none123
- ベストアンサー率30% (49/162)
ちょっと嘘入ってるかもしれませんが(何!)ご説明です。 8ビットというのは8桁の数字の列です。但しその中には0か1しか書けません。 00000000 ~ 11111111 までの組み合わせが表現できます。 この組み合わせは、2の8乗分の数を表現できます。(0か1かの2択の8桁分) sesameさんの言われている256通りとはこのことです。 英語の文字は(記号とか含めても)そんなに種類が無いですよね。 256個で充分でしょう。 ということで、一文字ずつにひとつずつ数字を割り振っていきます。 たとえば 00000001 なら A ということにする みたいな感じでです。 (↑数字は大嘘です) こんな感じで、半角英数文字は 1バイトで表現できます。 ところが、日本語になると、そうはいきません。 文字はいっぱい漢字もたくさん。256コでは日本語は表現しきれません。 というわけで、日本語は英数文字の倍のデータ量である 2バイト使うようにしました。 これなら 2の16乗 なので 65536 通り となり 何とかなりそうです。 (記憶違いでなければ 13 桁使って残りは使っていないという話を聞いたことがあるのですが…そうすると 2の13乗だから 8192 通り?…なんか違うかも。) というわけで、日本語のような全角文字は2バイトで表現しました。 つまり、ひとつの文字にひとつの数字を割り振ってある と考えればよいのです。 多分日本語の文字といっても、使用頻度の低いものは収録されていないので、すべての文字を表示することは、出来ないのかもしれませんね。 上記のような表現方法の結果、全角は2バイト・半角は1バイト となっているようです。 ちなみに上の話は、メモ帳とかのソフトを使って純粋に文字だけ保存した場合のデータ量になります。 ワードなどのワープロソフトを使ってデータを作ると純粋な文字の情報以外にも、文字の表示位置や色の情報など、文字以外の情報をたくさん持ってしまうのでもっとデータは膨れ上がります。
お礼
ご回答ありがとうございます。 文字の表示位置や色の情報でも容量を使うんですね。そうですよね~。 ところで、半角カタカナは1byteなんですか? すいません、コンピュータ用語に弱いもので・・。
- Spur
- ベストアンサー率25% (453/1783)
「バイト」は「bite」ではなく、「byte」であることはNo.1のかたのご指摘通りです。 1byte=8bits(複数なので8bitではなく、8bitsです) 1bitは、「0」または「1」しか表現できないことはご存知ですね? ですから、8bitsは256ということも良いですか? 日本語を表現しようとしたら、何種類になりますか? 英語ならば、アルファベット26種類で、大文字と小文字でも2倍の52種類です。 数字を10種類と記号を20種類加えても82種類です。 でも、日本語はひらがなだけでも56種類です。 カタカナも56種類あり、漢字になると万のオーダーです。 ですから、1byteでは日本語が表現できないですよね? だから2bytes使うのです。 「保存」と言う表現はおかしいですね、「1byteまたは2bytesで何種類表現可能か?」ですね? 上記のように1byteは256種類で、2bytesはその二乗の65536種類の表現ができます。 2HDFDが1.44MBなのはIBM仕様です。 NEC方式では1.2MBです。 この1枚に何文字入るかというご質問ですか? 保存の仕方によって違うのじゃないでしょうか? 文字を何も書かなくてもファイル名を作るだけで1,000bytes必要です。 フォルダを作っても1,000bytes必要です。 また、バイナリー形式なのか、テキスト形式なのか、どんなフォーマットのファイルなのかによってもずいぶん違います。 FDに書き込まれるファイルはセクターという単位で書かれます。 セクターとセクターの間にはギャップがあります。 その分も減ってしまいます。 IBM形式の1.44MBならば、640のセクターがありますので、それだけでもずいぶん減っています。 従って、どんなファイル形式で、どんなファイル構成で格納するのかを定めないと格納できる文字数は計算できません。 それらを無視して、バイト数だけなら、No.1の方が言われる通りです。 「何文字入る」という概念を捨てた方が良いと思います。
お礼
ご回答ありがとうございます。 ファイル名を作るだけで1000bytes、フォルダを作るだけでも1000bytes必要なんですね。1.44MBの場合、640セクターあるんですか。知らないことをいろいろ聞けて、大変勉強になりました。 ありがとうございました。
- sesame
- ベストアンサー率49% (1127/2292)
まず重箱ですが、バイト=byteです、為念。 さて、文字情報を格納するのに必要なバイト数ですが、 ABC..., 123..., !"#... のような英数半角文字…1バイト あいう..., アイウ..., 亜唖娃... のような日本語全角文字…2バイト というのはご存じかと思います。 1バイトは16進2桁なので、16^2=256通りの組み合わせが表現できます。 2バイトならさらにその256倍で、65536通りですね。 ただし、これらの文字セットがすべて埋まっているわけではありません。 なお、2HDフロッピーの記憶容量である1.44MBですが、正確には1,457,664バイトになります。 これにプレーンテキストでフルに文字を書き込むと、単純計算で 1バイト…1,457,664文字分 2バイト…728,832文字分 になります。実際にはセクタギャップやFATに食われる分もありますから、もっと少なくなりますが。
お礼
ご回答ありがとうございました。 byteですよね~。すいません。 プレーンテキストで、フルに文字を書き込めれば、そのまんま保存可能であるということが、すごくわかりやすかったです。実際には、それ以外の処理をするのに、容量を使われるので、少なくなるんですよね。 本当にありがとうございました。
お礼
ご回答ありがとうございます。 すごく詳しく説明していただき感謝しています。 奥が深いですね~。 ありがとうございました。
補足
ユニコードという体系は、現時点でかなり使われているものなのですか?