-1

たとえば、Javaの実数は8バイトですが、C++の実数は4バイトしかかかりません。同様に、文字の場合、Javaは2バイトを使用しますが、C++は1バイトしか使用しません。なぜサイズが違うのですか?

4

7 に答える 7

9

あなたが言っていることは真実ではありません。CおよびC++には、固定サイズの型はありません(で指定されたものを除くstdint.h)。

そして、あなたがその声明からあなたに答えを得なかったならば、ここに明白なものがあります:

「Javaには固定サイズのデータ​​型が含まれているのに対し、CおよびC ++のすべての基本的なデータ型は、プログラムがコンパイルされる実際のプラットフォーム(マシンアーキテクチャ+オペレーティングシステム)に依存するため、違いがあります。」

于 2012-08-02T09:45:33.257 に答える
3

まず、C ++の型の実際のサイズは実装に依存しますが(char9ビットの実装もあります)、両方の言語をサポートするほとんどのプラットフォームで、C++floatdoubleJavaの両方でまったく同じサイズになります。

に関してはchar、Javaタイプcharは多かれ少なかれ wchar_tC++に対応しています。論理的には、ほとんどのプラットフォームでは4バイトである必要がありますが、さまざまな歴史的理由から、Windows、AIX、およびJavaランタイム環境では2バイトにすぎません。

charJavaには、C++タイプに相当するものはありません。

于 2012-08-02T09:53:38.047 に答える
1

c++はプラットフォームに依存しています。たとえば、-intはワードのサイズになります-32ビットまたは64ビットは、コンピュータの新しさによって異なります。

javaははるかに一般的です-サイズを定義するJVM上で実行されます。C#の場合と同じです。どちらも、使用しているOSとCPUに依存しません。

于 2012-08-02T09:47:08.673 に答える
1

C++タイプのサイズは石で設定されていません。規格によると(3.9.1基本タイプ):

文字(char)として宣言されたオブジェクトは、実装の基本文字セットのメンバーを格納するのに十分な大きさでなければなりません。

それとその後:

標準の符号付き整数型には、「signed char」、「short int」、「int」、「long int」、および「longlongint」の5つがあります。このリストでは、各タイプは、リスト内でその前にあるものと少なくとも同じ量のストレージを提供します。

<...>

浮動小数点のタイプには、float、double、およびlongdoubleの3つがあります。型doubleは、少なくともfloatと同じ精度を提供し、型long doubleは、少なくともdoubleと同じ精度を提供します。

ご覧のとおり、正確な値は記載されていません。

于 2012-08-02T09:47:58.613 に答える
1

CおよびC++には多くのタイプのサイズが定義されていませんが、通常floatはJavaと同様に4バイトであり、Javaと同様にdouble8バイトです。Cには標準のバイトタイプがありません。

charCでは1バイトですが、符号付きまたは符号なしであることが保証されていません。Javaでは2バイトであり、0〜65535の文字をサポートするように署名されていることが保証されています。

ここでの違いは、サポートする必要があるのは7ビットASCIIだけのCが設計されていることです。Javaは、16ビット文字で十分と思われるときに設計されました。皮肉なことに、Unicodeは65535を超えないため、Javaは複数charのコードポイントを使用するコードポイントもサポートするようになりました。

于 2012-08-02T09:49:43.377 に答える
0

設計された言語が異なるデフォルト表現を使用することを選択しただけです。それ以上に複雑なものはありません。

charたとえば、Javaでのサイズは、16ビットのUnicode文字(2バイトが必要)を使用したいという願望によって動機付けられました。これは、いくつかのトレードオフのバランスをとった設計上の決定です。

  • (C / C ++のように)8ビット文字を使用することもできますが、その場合、かなりの数の有用なUnicode文字が1つの文字に収まりません。
  • 32ビット文字を使用して、将来さらに多くの文字を許可することもできます(UTF32を想定)。しかし、それらのビットの多くはほとんどの場合無駄になります

Javaでは4バイトの浮動小数点数を使用できることに注意してください。これは(8バイト)のfloat代わりに呼び出されます。double

于 2012-08-02T09:46:35.037 に答える
0

文字の場合、Javaは2バイトを使用しますが、C++は1バイトしか使用しません。

規格がそう言っているからです。

Javaの場合:

Java 2プラットフォームは、char配列、StringクラスおよびStringBufferクラスでUTF-16表現を使用します。

C ++の場合:

sizeof(char)、sizeof(signed char)、sizeof(unsigned char)は1です。

于 2012-08-02T09:52:20.613 に答える