• ベストアンサー

2バイトって何文字分ですか?

puni2の回答

  • ベストアンサー
  • puni2
  • ベストアンサー率57% (1002/1731)
回答No.4

>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規格には,あまり使われない文字は入っていませんので(日常生活にはほぼ十分ですが),「すべての文字」というわけにはいかないと思います。 なお,文字コードの話は,厳密に述べようと思うとかなり大変ですので,詳しい説明は専門書に譲ります。 フロッピーの記憶容量については既出の回答でおわかりと思います。

gonpapa2002
質問者

お礼

ご回答ありがとうございます。 すごく詳しく説明していただき感謝しています。 奥が深いですね~。 ありがとうございました。

gonpapa2002
質問者

補足

ユニコードという体系は、現時点でかなり使われているものなのですか?

関連するQ&A

  • マルチバイト混在の文字列整形

    OS: Linux Ubuntu 言語: C++ 引数でchar*型の文字列配列(マルチバイト含む)を受け取り 指定した幅で枠つきで文字列を出力したいのですがうまくいきません。 作りたい出力 ━━━━━━━ ┃1: あいうえお┃ ┃2: かきく   ┃ ┃3: abc    ┃ ━━━━━━━ - str[] = {"あいうえお", "かきく", "abc"} - あいうえおの後ろは空白なし - 他は空白と文字列を合計してあいうえおと同じ長さに合うように 私の環境では日本語は3byteと認識され  strlen("あいうえお") = 15 となります。 イメージでは for (i = 0; i < strlen(str[])の最大値; i++) { cout << "┃" << i << ":" << setw(15) << left << str[i] << "┃" } のようなコードになると思うのですが 日本語一文字が出力上は2byte分の幅に見えるのに 認識としては3byteになってしまうので空白が1byte多くなり ━━━━━━━ ┃1: あいうえお┃ ┃2: かきく    ┃ ┃3: abc       ┃ ━━━━━━━ のようにずれてしまいます。 (表記上、最初の枠もずれていますが  現状は足りない分を埋めるsetfillが余計に働いてしまうということです。) 何か対策はありますでしょうか?

  • 人の脳をフルに活動できるとしたら、何バイトの記憶容量があるのでしょうか?

    人の脳をフルに活動できたした場合、 2000年分ぐらい?の新聞の文字データを入れることができると何かで、聞いたことがあります。 ------------------------------------------ では、 人の脳を100%活動でき、すべてを記憶に使った時、 何バイトの記憶容量があるのでしょうか?

  • FDの記憶容量計算について。

    ただ今、J検3級に向けて勉強中です。 FDの記憶容量計算について、教えてください。 1セクタが512バイト,1トラックが9セクタ,片面80トラックでフォーマットされている両面記録可能なフロッピーディスクの記憶容量を計算してみる。 1トラック分の記憶容量=512×9(バイト) 1面分の記憶容量=1トラック分の記憶容量×80(バイト) したがって、総容量=1面分の記憶容量×2(両面分)=737280B(バイト) =737280÷1024=720KB(キロバイト) セクタサイズだけを1024バイトと変えた場合に、同様の計算をすると、その記憶容量は1.44MB(メガバイト)となる。 上記とあります。 専門用語が分からない私は、まず、何をどのようにイメージしたら分かりやすいでしょうか。 また、専門用語ではなく、分かりやすい言葉で書き換えてくださる方はいらっしゃいませんでしょうか。 よろしくお願いいたします。

  • 海外PCで開くときのPDF中の特殊文字(2バイト文字)

    日本語の文章を英訳して、PDFにし、海外に送る予定です。 その際、日本語ではよく使われる、丸で囲まれた数字(1)(2)や、点・、 矢印→、四角□■◆□などの2バイト文字を英文中に使っても良い(海外のPCで読める)のでしょうか。 なんとなく、オリジナル文書(ワード)では2バイト文字は海外では文字化けしそうな感じがするのですが、PDFにすると2バイト文字も読めるのかなぁと言う気もしています。 NGの場合、回避テクニックもあれば教えてください。 ご指導よろしくお願いいたします。

  • 文字などで

    こんばんは。 Win98を使用しているんですが、 ネットなどをしている時に 検索サイトの『検索欄』に文字を打って検索 をすると、次回からその欄に文字が記憶され 選択できるようになりますよね? そこで、3つだけ質問させてください。 ・あの文字はどこに保存されてるのでしょうか? ・保存されているなら、消したりできるのですか? ・保存をしない設定は可能なんですか? ちょっとそれが分からなくて、 日本語入力ソフトはIME 98です。

  • 全角半角あわせて3文字

    全角半角が混在している文字列の左から3文字を取得したい場合にいい方法はないでしょうか? mb_substr関数で第3パラメータはバイト数で指定するようです。 関数リファレンスでは「最大文字数」って表現になってます。 http://php.net/manual/ja/function.mb-substr.php 半角なら文字数=バイト数ですが、全角だと指定の半分の文字数になります。 最大だから間違ってはないですが、文字数じゃないよな‥‥っていつも思ってます。 いったん半角→全角にして、6バイト分を切り出すのはできます。 でも、英数字も全角半角混在してるので元の文字列を壊したくないのです。 mb_substrの第3パラメータを6から3まで、mb_strlenが3になるまで回すのもやってみました。 でも、なんかスマートじゃないんですよ‥‥。 なにかこう、スマートないい手はないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • Oracle AL32UTF8でのバイトサイズ見積

    データベースのテーブルのカラムのサイズを定義しようとしています。調べた限りでは、Oracle AL32UTF8においては、以下の容量を消費するとなっていました。 (1) ASCII -> 1 byte (2) 記号文字 -> 2 byte (3) 半角カナ、全角カナ、ひらがな、漢字 -> 3 byte これは、「1」や「a」などの英数字は1バイト、「%」や「#」などの記号は2バイト、「あ」「ア」「亜」などの全ての日本語は3バイトで保存されるということだと思いますが正しいでしょうか? そうであれば、例えば氏名項目に20文字を保証したい場合は、一番バイト消費の多い3バイトで見積もり、20 * 3 = 60バイトで定義すればよいでしょうか? 第3水準文字、第4水準文字は4バイトで保存されるという記事もあったのですが、これらはとても稀なケースなので考慮せずに3バイトで考えておくのが一般的でしょうか? あとは、バイトで考えずにNLS_LENGTH_SEMANTICSという初期化パラメータをCharにすることで文字数ベースにすることができるとも聞いたのですがこのアプローチは推奨されますか?全てのテーブルに影響があると思うので、大きな決断になると思うのですが普及したやり方なのでしょうか? 以上、見解を教えて頂けると助かります。以上、宜しくお願いします。

  • 1B(バイト)って?

    1B(バイト)というのは、記憶容量なのでしょうか?もしそうならば1B は、文字や数字がどれぐらい入るのが「1B」なのでしょうか?

  • 2バイト文字を一括削除するマクロ

    英語と日本語が混在しているdocファイルがあり、 日本語のみ一括削除したいと思っております。 日本語(=2バイト文字)を一括削除するマクロはあるでしょうか。

  • ヤフーメールの最大送信容量は何バイトでしょうか?

     ヤフーメールの最大受信容量は1通あたり10MBです。最大送信容量は何バイトでしょうか?2MB超のBMPファイルをメールソフトから送信したら、送信不可でした。なお無料で使っています。