== 算術演算 == === データ型 === 数値を扱う基本データ型には次のものがあります。 ||型||長さ||値|| ||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! の値を計算できるか確かめなさい。 }}}