• ベストアンサー

int型の範囲はシステムに異存するのでしょうか?

最近Javaの勉強を始めた者です。 int型についてなのですが、 C言語だと32ビットシステムならば32ビット(4バイト)、 16ビットシステムならば16ビット(2バイト)の情報を保持できたと思うのですが、 Javaではシステムに異存せずに4バイト固定なのでしょうか?

  • Dog-X
  • お礼率100% (3/3)
  • Java
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

C言語とJAVAの設計思想の違いが先頭の部分に書いてあります。↓ INTは32ビット、LONGが64ビットというのは機種、OSに依存しません。

参考URL:
http://www.ics.kagoshima-u.ac.jp/edu/proen3/datatype.html
Dog-X
質問者

お礼

参考URLのほう、ありがとうございます。 上記質問以外にも参考になりそうです。 やはりJavaでは固定値なのですね。

その他の回答 (1)

noname#49664
noname#49664
回答No.1

>Javaではシステムに異存せずに4バイト固定なのでしょうか? Javaは、Java仮想マシン内で実行されます。Java仮想マシンは、32bitマシンでも64bitマシンでも、常に32bitだったはずです。したがって、(実際のCPUが何bitであれあれ)常に32bitの仮想マシン上で動くのですから、変化することはないでしょう。

Dog-X
質問者

お礼

JVM上での動作という点が大変参考になります。 迅速な回答ありがとうございました。

関連するQ&A

  • 引き数がポインタでない関数の戻り値はなぜint型なのか?

    最近、疑問に思っていることがあって質問したいんですが、一般的にc言語 で使われる関数っていうのは、引き数としてポインタをとる関数以外は全て 戻り値はint型なのですがこれはなぜでしょう。私自身の結論としては、も し関数の戻り値がchar型だとしたらchar型で表せる範囲の値は全てasciiコー ドとして使われているので、もしエラーがあって戻り値としてEOF(-1)を返す 際に1byteでは同じビット配列になる255が既に使われていてEOFとして-1を定 義できないために、-1と255が同じビット配列ではない1byte以上のデータ型 つまりint型(たぶん、int型がコンピュータが一番効率良く処理できるデータ型なのでたぶんint型を使ったと思いますが)を使ったのではないかと言う 結論に達したのですがこれは正しいのでしょうか。どなたか御教授お願い致 します。

  • byte[2] から int へ。

    それぞれintの下位2バイトのビット列保持するbyte型配列の要素2つを int 形の整数に治したいのですがいい方法が思いつきません。例えば、 byte[0] = 0x01; byte[1] = 0x01; ならば、 00000000 00000000 00000001 00000001 で、256 + 1 = 257 byte[0] = 0x02; byte[1] = 0x10; ならば、 00000000 00000000 00000010 0000011 で、512+3 = 515 です。byteの値が0~127の場合は int n = byte[0] << 8 n = n | byte[1] という感じでいけそうなのですが、byte[0]が 0xFF のような負の値のときにint とのビット演算(もしくはシフト演算)で上位2バイト分も補数表記のためか全部1で埋まってしまい、上の方法はだめみたいです。 byte[0] = 0x01; byte[1] = 0xFF; のときは、 00000000 00000000 00000001 11111111 で、256+255 = 511 としたいのですが、場合わけをせずに求める よい方法はないでしょうか。

    • ベストアンサー
    • Java
  • int型とchar型について

    C言語初心者です。 よろしくお願いします。 ◎1----------------------- #include<stdio.h> int main(void) { int ss[4]="789"; printf("%c\n",ss[0]); return 0; } --------------------------- ◎2----------------------- #include<stdio.h> int main(void) { int *p; p="789"; printf("%c\n",*p); return 0; } --------------------------- ◎1、◎2の2つのプログラムについて疑問があります。 ◎1の「int ss[4]="789";」と◎2の「int *p;」のintの部分は今まで、何の疑問も抱かず、「char」として入力していました。 そこでchar型は1バイトの整数、int型は4バイトの整数ということで容量が違うだけで、intとしても大丈夫だろうと思ったのですが、 ◎1では、「'initializing' : 'char [4]' から 'int [4]' に変換することはできません。」とエラーが出て、◎2では「'char [4]' から 'int *' に変換することはできません。」とエラーが出ます。 intは文字列は扱えないということなのでしょうか? 以上intだと実行できない理由がわかりません。 初歩的なことですいませんが、教えていただけると嬉しいです。

  • 固定長なデータ型の定義

    int型などは可変長型なのでサイズは16ビット、32ビット、 64ビットなどC言語だと環境によって異なってきますよね? さらにlong型は32ビット64ビットの可変長でも、 long long型は64ビット固定長型であったり、 long int型は32ビットが保証値だとか、 shortを付けるとサイズが小さくなるのかだとか、 非常に煩わしいのでどの環境でも常に同じサイズで定義できるよう 全てtypedefで固定長にしたいと考えています。 (できれば__int32等は言語仕様では無いので使いたくないので…) ですが検索するとどうも情報が各サイトごとに微妙に違ってたりして 私には正しいかどうかの判断が付かなくなってしまいました。 (C言語以外もあったのでそのせいかもしれませんが;) 以下のように、8ビット、16ビット、32ビット、64ビット、 32ビット浮動小数、64ビット浮動小数を定義したいのですが どうかアドバイスをいただけないでしょうか? 宜しくお願い致します typedef int8   signed char; // -127~127 typedef int16  //16ビット固定整数 typedef int32  //32ビット固定整数 typedef int64  //64ビット固定整数 typedef dec32  //32ビット固定浮動小数 typedef dec64  //64ビット固定浮動小数

  • read(buf,int,int)メソッドで1文字取得する

    javaを使ってプログラミングを勉強しています。 read(buf,int,int)メソッドで受信したバイトデータをbufに格納していると思うのですが、 格納したバイトの最後の文字を取得する方法が分かりません。 送信側では送信バイトの最後の文字をsにして送信します。 受信側では読み込んだバイトデータの最後の文字がsだったら、 ループを抜けるというようにしたいのです。 どうやって最後の文字を取得するのでしょうか?

    • ベストアンサー
    • Java
  • int とcharの使い方と違い

    教えてgooに投稿するのは初めてですがよろしくお願いします。 最近C言語を勉強し始めた初心者です。 ネットのサイトを見て独学でしています。 過去スレッドをさらっと見て聞きたいことが書いてなかったので投稿します。(同じスレッドがあったらすみませんOTL) #include<stdio.h> int main(void) { int str='a'; printf("str=%c\n",str); return0; } この上のプログラムでは str=a と出て、エラーが出ずにコンパイル出来ました。でも、 #include<stdio.h> int main(void) { int str[]="abc"; printf("str=%s\n",str); return0; } とするとエラーが出ます。 int とcharの使い方と違いについて詳しく教えてほしいです>< お願いします。

  • お勧めのコンピュータ言語の資格

    スキルアップのために今年中に何か新しい情報系の技術・資格を取りたいと思います。 ここ6年ほど組み込み系のシステム開発を中心に主にC言語での開発を行ってきました。 C言語以外のコンピュータ言語の勉強をして何か資格を取りたいと思います。 JavaとPerlは新人研修のときに少しかじったくらい勉強しましたがここ6年ほどはまったく使ってもいません。 Rubyという言語を最近知ったのですがこれは将来性はありそうですか? お勧めの言語と資格はがあればぜひ教えてください。

  • Javaの配列の宣言方法のメリット?

    1週間ほど前からJavaを独学している者です。 C言語をその前からやっていて、初心者レベル程度ならわかると思います。 そこで、質問です。 C言語の配列宣言:   int array[10]; Javaの配列宣言:   int array[] = new int[10]; 二つの言語とも、要素10個のarray1次元配列変数を宣言していると思います。 C言語の書き方はシンプルなので、納得がいきますが、Javaの方はどうしてこの形で宣言をするのかわかりません。(自分が言語製作者ならシンプルな書き方を採用します) だから、このような宣言の方法をとるということは何か理由があるのだと思います。 自分が思うところ、JavaはC言語より、柔軟で多機能だとおもうので、その影響で汎用性をますために、 長くなっているのかな~?と思っています。 こんごJavaの学習を進めていくと、例えば、   int array[] = new double[10]; //←エラーになりました みたいに型のちがう、宣言が出てきたりするのでしょうか? ちらっと、学習に使っている本をみたところ、動的配列の作成は別の操作で実現しているようなので、 「動的とは関係ないのかな?」と思っています。 長くなりましたが、Javaの配列宣言のメリットを教えてください。

    • ベストアンサー
    • Java
  • 64ビット対応!システム

    自社の業務システム開発を検討しています。 現在、現状分析、要求定義などをしております。 開発はまだ先ですがプラットフォームなどの検討に当たり 64ビットにするかどうかです。 現状では64ビット対応はほとんどありませんし、 意識して作る必要もないと思います。 C++であれば再コンパイルすればどうにかなってしまうと思います。 たとえばWindowsServer2003 x64はあってもMS-Officeすら動きません。 プリンタドライバすらあるかどうかわからない現状ではテストもしにくいと思います。 javaで開発するとしても64ビット大丈夫? DB(Oracle,Sql-Serverなど)は大丈夫? クライアントはまだ32ビットだけど、2年もすればかなり64ビットに なる予感もします。 10年動くシステムなどはありえませんがちょっと気になりました。 intの範囲が違うよね?とかあります。 基本的に超高速なシステムを作るわけでもなく、32ビットで十分です。 DBのサイズもそれほど大きくありません。 ただちょっと気になったので質問してみました。 既存のシステムを64ビットOSに入れ替え、64でコンパイルし直し。 DBとかも64ビット版に・・・ とかやっても問題なく動くとは考えにくいです。 心配しすぎでしょうか? 一番懸念しているのはクライアントが64ビット常識になったときです。

  • ネット通販システムについて

    ネット通販システムを作りたいのですが、 JavaとSQLは学校で勉強しました。 そのほかには、どんな知識あるいは言語が必要ですか?

    • ベストアンサー
    • Java

専門家に質問してみよう