• ベストアンサー

Integer型のサイズリミットはマシン又はコンパイラーに依存する?(C, Java, Pascal, Ada)

学校の課題で困ってます。 整数型のサイズのリミットはマシンやコンパイラで依存する言語とそうでない言語がありますよね??CやC++は依存してJavaは依存しないと思うんですがAdaやPascalではどうなのですか?これらはあまり詳しくないのでわかりません。 詳しい方いたらお願いします。 もしCやJavaについても違うとかありましたら言ってください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

言語に詳しいかどうかの問題じゃなくって, 「規格をチェックしてるかどうか」という問題なんだけどね.... Pascal は JIS で「整数の範囲は処理系依存」と書いてある. Ada は JIS にあたれなかったんだけどちょっと調べたところではおそらく処理系依存. C# は ECMA 334 を見ればよく, 整数型の範囲は規格 (実際には CLI の規格である ECMA 335) で決まっています. C++/CLI は ECMA 372 で, CLI の上で定義されているので C# と同様. Java は規格もなにもあったもんじゃないけど #1 に書かれているように JavaVM で定義されています.

mishel1120
質問者

お礼

わざわざ調べていただき、恐縮です。

その他の回答 (6)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.7

おっととと. JVM にも long はありましたか>#6. 変数のアドレッシングがらみと混乱したのかも. あと, 「環境依存」になったら Java といえないと思います. 例えば int が 64ビットなんてことになったら (validation を通らないと思うので) (Sun が)「Java と名乗る」ことを許さないと思う.

mishel1120
質問者

お礼

課題の提出日が来たんで締め切ります。 今まで色々ありがとうございました。参考にさせていただきました。

回答No.6

#3です。#3の補足になりますが、Java言語仕様だけでなくJavaVM仕様でも整数型の範囲の規定があります。 「Java」とは広義には言語と処理系の両方を含むので、言語仕様と両方の参照が必要でした。 以下は当該部分の引用です。 2.4.1 Primitive Types and Values A primitive type is a type that is predefined by the Java programming language and named by a reserved keyword. The integral types are byte, short, int, and long, whose values are 8-bit, 16-bit, 32-bit, and 64-bit signed two's-complement integers, respectively, and char, whose values are 16-bit unsigned integers representing Unicode characters (§2.1). http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#22930 >すべて同じだと思ったので、「Javaの実行環境はJavaVMだけである」と書いたのですが。 JavaVMの実装の話だと誤解してしまったようです。申し訳ないです。 おっしゃるとおり、どのJVMもJVM仕様に従っており挙動は同じはずです。 JVM上で実行するのではなく、Javaを直接ネイティブコードにコンパイルするGCJのようなネイティブコンパイラも存在します。 言語仕様に整数型の範囲が規定されている以上、GCJでコンパイルして実行したとしてもJVM上で実行した場合と結果は結局おなじになります。 http://gcc.gnu.org/java/ 従って、Javaは依存しないといってよさそうです。 逆にもし依存するJavaの処理系があったとしたら、それはJavaと呼べるかあやしくなってくるかと思います。 >JVM に「long」は存在しないんでしたっけ 上記のとおりJVMにもありますよ。

mishel1120
質問者

お礼

とても詳しくありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

#2 です. ああ, そういえば JVM に「long」は存在しないんでしたっけ>#3. すみません, そういうわけで「Java は言語で規定している」ということで. .... おお, #2 は間違ってるよ. C++/CLI では「C++ としての型」は処理系定義っぽいです. 特に int なんか「処理系定義の『自然な』整数型」って書いてある. CLI としての型は CLI で規定されるので処理系によらず同じになるはずですが. C# は「それぞれの型は CLI で規定される型の略記である」という立場なので, 「C# 言語で規定される」という表現と「CLI で規定される」という表現のどちらも (ある意味で) 正しい, といえるでしょうか.

mishel1120
質問者

お礼

訂正ありがとうございます。

  • notnot
  • ベストアンサー率47% (4901/10362)
回答No.4

#1です。 >>現在のところ単一の実行環境(JavaVM)しかない >すでにJavaVMには複数の実装が存在しています。 >SunのHotspot VMを始め、Microsoft VMやJRockit JVMなどがありますし、個人で開発した人すらいます。 JavaVMの実装系の話は、Java言語と関係ないですよね。Javaの実行環境はJavaVMで、JavaVMの実行環境がいろいろあるだけ。 実装系によってJavaVMの仕様が異なると言うことでしょうか?すべて同じだと思ったので、「Javaの実行環境はJavaVMだけである」と書いたのですが。

mishel1120
質問者

お礼

補足ありがとうございます。

回答No.3

Javaの整数型の範囲は言語仕様で決められており、 コンパイラやVMによって異なるということはありません。 以下は言語仕様からの引用です。 4.2.1 Integral Types and Values The values of the integral types are integers in the following ranges: For byte, from -128 to 127, inclusive For short, from -32768 to 32767, inclusive For int, from -2147483648 to 2147483647, inclusive For long, from -9223372036854775808 to 9223372036854775807, inclusive For char, from '\u0000' to '\uffff' inclusive, that is, from 0 to 65535 http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.2.1 >現在のところ単一の実行環境(JavaVM)しかない すでにJavaVMには複数の実装が存在しています。 SunのHotspot VMを始め、Microsoft VMやJRockit JVMなどがありますし、個人で開発した人すらいます。 http://www.namikilab.tuat.ac.jp/~sasada/prog/rava.html

mishel1120
質問者

お礼

Javaについて詳しく教えていただきありがとうございます。

  • notnot
  • ベストアンサー率47% (4901/10362)
回答No.1

Javaが依存しないのは、現在のところ単一の実行環境(JavaVM)しかないからですよね。 実行環境がハードウェアやOSごとに存在する普通の言語だと、環境ごとに違うでしょう。そう言う意味では、.NETにしか無い言語だと決まっていると言えるのかな。C#とか。 Pascalだと整数の範囲は言語仕様の外だったと思います。Adaはメインフレームから組み込みまであるので、おそらく環境が複数定義されているのではないかと。

mishel1120
質問者

お礼

回答ありがとうございます。

関連するQ&A