welcome: please sign in
location: "算術演算"の差分
2と6のリビジョン間の差分 (その間の編集: 4回)
2011-09-16 05:43:50時点のリビジョン2
サイズ: 1165
編集者: masahiko
コメント:
2012-03-22 01:37:16時点のリビジョン6
サイズ: 3365
編集者: masahiko
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 3: 行 3:
----
=== Cとの違い ===
=== データ型 ===
数値を扱う基本データ型には次のものがあります。

 ||型||長さ||値||
 ||byte||1バイト||整数 -128 から 127||
 ||short||2バイト||整数 -32,768 から 32,767||
 ||int||4バイト||整数 -2,147,483,648 から 2,147,483,647||
 ||long||8バイト||整数-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807||
 ||float||4バイト||浮動小数点 およそ±3.40282347E+38(6桁)||
 ||double||8バイト||浮動小数点 およそ±1.79769313486231570E+308(15桁)||
行 7: 行 15:
  . したがって、扱える値の範囲も決まっています。
  . Cでは処理系により異なる可能性がある。
----
=== 演算と型変換 ===
四則演算はCと同様に記述することができます。
行 8: 行 21:
 * 数値の型変換
   計算式の中で型が混在した場合、
   byte → short → int → long → float → double
   の方向にのみ変換が行われます。
 . '''例'''
計算式の中で型が混在した場合、
次の方向にのみ変換が行われます。
行 14: 行 24:
 int i;
 i = 1.25 * 3 * 4;
 byte → short → int → long → float → double
行 17: 行 26:
 . 代入文の右辺に 1.25 があるため 3 や 4 は double に変換して計算されます。(ここまではOK)
 . その後 int に変換して i に代入しようとしています。
 . Cではこれで動作しますが、Javaではdoubleをintに変換できずエラーとなります。
 . 型変換を強制するにはキャスト演算子を用いて次のように記述します。(JavaでOK)
代入時も同様です。
 . Cでは代入時のみ、逆方向の変換も行われます。(Javaでは行われない)

逆方向には変換されません。
 . 型変換が必要なときは、キャスト演算子を使います。

=== 例1 ===
行 22: 行 35:
 i = (int)(1.25 * 3 * 4);  double a;
 a = 1.25 * 3 * 4;
 }}}
 . 代入文の右辺に 1.25 があるため 3 や 4 は double に変換して計算されます。
 . double の計算結果が double型 の変数 a に代入されます。

=== 例2 ===

 {{{
 int a;
 a = 1.25 * 3 * 4;
 }}}
 . 代入しようとする変数が int型 なので、doublet型 の値は代入できません。
 . Javaではエラーとなります。
 . CではOKでした。

=== 例3 ===

 {{{
 int a;
 a = (int)(1.25 * 3 * 4);
行 25: 行 58:
 * charは16ビットです。  . int型の変数に代入するには、演算結果を int に変換してやればよい。
 . 型変換を強制するにはキャスト演算子を用います。
行 27: 行 61:
 * charとintの変換は行われません。 ----
=== infinity, NaN ===
行 29: 行 64:
 * charの配列は文字列とは異なります。 整数演算
 . 0で割るとエラーになります。
 . 演算結果が扱える範囲を超えるとオーバーフローが起こり、変な値になります。
行 31: 行 68:
 * boolean以外を論理演算や条件に用いることはできません。 浮動小数点演算
 . 0で割ると infinity(無限大) になります。
 . 演算結果が扱える範囲を超えたときも infinity(無限大) になります。
 . -infinity(負の無限大) もあります。
 . infinity を含むなどで計算できない場合に NaN(Not a Number) になることがあります。
----
=== 演習 ===
行 33: 行 76:
 . 次のような書き方も間違いです。 '''for'''文を用いて n! を求めるプログラムを作成しなさい。
 . n! = 1 * 2 * ... * n
 . printf文を用いて結果を表示させること。
 . '''1箇所'''だけ修正すると別の n について計算できるようにプログラムすること。

ファイル名は Lesson2.java とすること。

(1)
行 35: 行 85:
 int k;
 ...
 while ( k ) {
   ...
 }
n = 10 の場合の n! の値を計算し、表示しなさい。
行 41: 行 87:
(2)
 {{{
基本データ型のどれを用いると大きな n について n! の正確な値を計算できるか考え、計算できる最大の n! の値を表示しなさい。
 }}}
(3)
 {{{
数値を扱える基本データ型すべてについて、いくつまでの n について n! の値を計算できるか確かめなさい。
}}}

算術演算

データ型

数値を扱う基本データ型には次のものがあります。

  • 長さ

    byte

    1バイト

    整数 -128 から 127

    short

    2バイト

    整数 -32,768 から 32,767

    int

    4バイト

    整数 -2,147,483,648 から 2,147,483,647

    long

    8バイト

    整数-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807

    float

    4バイト

    浮動小数点 およそ±3.40282347E+38(6桁)

    double

    8バイト

    浮動小数点 およそ±1.79769313486231570E+308(15桁)

  • 基本データ型のバイト数は処理系によらず決まっています。
    • したがって、扱える値の範囲も決まっています。
    • Cでは処理系により異なる可能性がある。


演算と型変換

四則演算はCと同様に記述することができます。

計算式の中で型が混在した場合、 次の方向にのみ変換が行われます。

  •  byte → short → int → long → float → double 

代入時も同様です。

  • Cでは代入時のみ、逆方向の変換も行われます。(Javaでは行われない)

逆方向には変換されません。

  • 型変換が必要なときは、キャスト演算子を使います。

例1

  •  double a;
     a = 1.25 * 3 * 4;
  • 代入文の右辺に 1.25 があるため 3 や 4 は double に変換して計算されます。
  • double の計算結果が double型 の変数 a に代入されます。

例2

  •  int a;
     a = 1.25 * 3 * 4;
  • 代入しようとする変数が int型 なので、doublet型 の値は代入できません。
  • Javaではエラーとなります。
  • CではOKでした。

例3

  •  int a;
     a = (int)(1.25 * 3 * 4);
  • int型の変数に代入するには、演算結果を int に変換してやればよい。
  • 型変換を強制するにはキャスト演算子を用います。


infinity, NaN

整数演算

  • 0で割るとエラーになります。
  • 演算結果が扱える範囲を超えるとオーバーフローが起こり、変な値になります。

浮動小数点演算

  • 0で割ると infinity(無限大) になります。
  • 演算結果が扱える範囲を超えたときも infinity(無限大) になります。
  • -infinity(負の無限大) もあります。
  • infinity を含むなどで計算できない場合に NaN(Not a Number) になることがあります。


演習

for文を用いて n! を求めるプログラムを作成しなさい。

  • n! = 1 * 2 * ... * n
  • printf文を用いて結果を表示させること。
  • 1箇所だけ修正すると別の n について計算できるようにプログラムすること。

ファイル名は Lesson2.java とすること。

(1)

  • n = 10 の場合の n! の値を計算し、表示しなさい。

(2)

  • 基本データ型のどれを用いると大きな n について n! の正確な値を計算できるか考え、計算できる最大の n! の値を表示しなさい。

(3)

  • 数値を扱える基本データ型すべてについて、いくつまでの n について n! の値を計算できるか確かめなさい。

算術演算 (最終更新日時 2012-03-22 01:37:16 更新者 masahiko)