ホームページ  >  記事  >  char型は何バイトを占めるのでしょうか?

char型は何バイトを占めるのでしょうか?

青灯夜游
青灯夜游オリジナル
2023-03-10 15:54:2135979ブラウズ

char 型は、C または C では 1 バイト、Java では 2 バイトを占めます。 char は、C または C で文字変数を定義するために使用されます。char データ型は整数型で、1 バイトのみを占有します。 Java では、Java コンパイラがデフォルトで Unicode エンコードを使用するため、char 型は 2 バイトを占有し、2 バイト (16 ビット) ですべての文字を表すことができます。

char型は何バイトを占めるのでしょうか?

このチュートリアルの動作環境: Windows 7 システム、Dell G3 コンピューター。

Baidu で「char は何バイトを占めるか」を検索したところ、次のような答えが得られました:

char型は何バイトを占めるのでしょうか?

char C または C で定義された文字変数は 1 バイトのみを占める整数型で、値の範囲は -128 ~ 127 (-27 ~ 27-1) です。

char 型は 1 バイト (8 ビット) を占有し、格納できる正の整数は 0111 1111 (つまり 127) です。

明らかにこれは私たちが望む結果ではないので、「Java の char は何バイトを占めるか」を検索し続けました。

char型は何バイトを占めるのでしょうか?

# #Java の Char は、文字のデータ型を格納するために使用されます。2 バイトを占有し、Unicode エンコードを使用します。エンコードの最初の 128 バイトは ASCII と互換性がありますが、一部の文字はそれを表すために 2 つの文字を必要とします。

C または C と Java で char が同じバイト数を占めるのはなぜですか?

一部の文字を表すために 2 つの文字が必要になるとはどういう意味ですか?

エンコーディング

この問題について説明する前に、まずいくつかの知識ポイントを普及させてみましょう。

まず第一に、コンピューターに保存されている情報は 2 進数で表されることは誰もが知っています。では、人間が使用する漢字や英語をコンピューターに保存するにはどうすればよいでしょうか?

たとえば、「a」をバイナリに変換してコンピュータに保存することを エンコーディング;

そしてコンピュータに保存された 2 進数を解析して表示することをエンコーディングといいます。は のデコード と呼ばれます。

文字セット

文字(キャラクター)とは、各種国語文字、句読点、図形記号など、さまざまな文字や記号の総称です。 、数字など。文字セット (文字セット) は、複数の文字の集合です。文字セットには多くの種類があり、各文字セットに含まれる文字数は異なります。一般的な文字セット名: ASCII 文字セット、GB2312 文字セット、BIG5 文字セット、 GB18030 文字セット、Unicode 文字セットなどこれは百度百科事典の説明ですが、とにかく文字セットとは文字の集合であり、文字セットにはたくさんの種類があり、文字セット内の文字数も異なります。コンピューターがさまざまな文字セットのテキストを正確に処理するには、コンピューターがさまざまなテキストを認識して保存できるように文字エンコーディングが必要です。

unicode

その名前は Unicode、ユニバーサル コードとも呼ばれ、シンボルの数は増え続けており、100 万を超えています。

Unicode が作成される前には、数百ものエンコーディング システムがありました。エンコーディングには十分な文字数を含めることはできません。その名前からわかるように、すべてのシンボルのエンコーディングです。各シンボルには独自のエンコーディングが与えられるため、エンコーディングの違いによるコード化けの問題は解消されます。

ほとんどのコンピュータは、すべての大文字と小文字、数字、句読点、制御文字を表す 7 ビットのエンコード スキームである ASCII (American Standard Code for Information Interchange) を使用しています。 Unicode には ASCII コードが含まれており、「\u0000」から「\u007F」は 128 個の ACSII 文字すべてに対応します。

実力のある人だけが基準を作れるような気がしてなりません。 Unicode は単なるシンボル セットです。シンボルのバイナリ コードを指定するだけです。文字と数字の間のマッピングを提供するだけで、このバイナリ コードの格納方法は指定しません。英語の文字数は非常に少なく、1 バイトで表現できることはわかっていますが、Unicode の中国語記号の数は非常に多く、1 バイトではまったく使用できません。その結果、後に UTF-8 や UTF-16 などの Unicode 文字格納のためのさまざまな実装方法が登場しました。 UTF-8 は、インターネット上で最も広く使用されている Unicode 実装です。

内部コードと外部コード

Java の char は数バイトを占めるとよく言われますが、これは Java の内部コードの char であるべきです。

内部コードは、Java の実行時にメモリ内で文字と文字列をエンコードする方法を指します。外部コードは、シリアル化テクノロジなど、プログラムが外部と対話するときに外部で使用される文字エンコードです。外部コードは、内部コードでない限り、外部コードであると理解できます。なお、ソースコードのコンパイルにより生成されるオブジェクトコードファイル(実行ファイルやクラスファイル)のエンコード方式は外部コードに属します。 JVM の内部コードは UTF16 を使用します。 UTF-16 の 16 は、16 ビットの最小単位を指します。つまり、2 バイトが 1 単位です。初期の頃、UTF16 は固定長の 2 バイト エンコードを使用してエンコードされていました。2 バイトで 65536 個のシンボルを表現できます (実際にはこれよりも少ないシンボルを表現できます)。これは、当時の Unicode のすべての文字を表現するのに十分でした。ただし、Unicode の文字数が増加すると、2 バイトではすべての文字を表現できなくなり、UTF16 では 2 バイトまたは 4 バイトを使用してエンコードを完了します。この状況に対処するために、Java は前方互換性要件を考慮して、4 バイトを必要とする文字を表す char のペアを使用します。したがって、Java の char は 2 バイトを使用しますが、一部の文字はそれを表すために 2 つの文字を必要とします。これは、一部の文字を表すために 2 つの文字が必要な理由を説明しています。

さらに: Java のクラス ファイルは文字の格納に UTF8 を使用します。つまり、クラス内の文字は 1 ~ 6 バイトを占めます。 Java のシリアル化中、文字も UTF8 でエンコードされ、1 ~ 6 文字が占められます。

#length()

次に、別の質問があります: Java の文字の String.length() は何ですか?

前の知識ポイントを読んだ後は、もう口を開いて 1 と答えることはできません...デモを書いて見てください: Tiger を使用して寅年にテストしてください。tigerUTF は対応する Unicode エンコードを表します。

         String tiger = "?";
         String tigerUTF = "\uD83D\uDC05";
         System.out.println(tigerUTF);
         System.out.println(tiger.length()); 
         System.out.println(tiger.codePointCount(0,tiger.length()));

char型は何バイトを占めるのでしょうか?

String.length() を呼び出した結果は 2 であると結論付けることができます。これは、string char 配列が占有していることを意味します。文字数ではなく、16 形式の UTF-2 コード単位 (つまり 4 バイト)。もちろん、codePointCount メソッドを使用して、取得したい文字数を取得できます。

関連知識の詳細については、

FAQ 列をご覧ください。

以上がchar型は何バイトを占めるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。