<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>算術演算</title><revhistory><revision><revnumber>6</revnumber><date>2012-03-22 01:37:16</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>5</revnumber><date>2011-09-16 06:16:04</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>4</revnumber><date>2011-09-16 06:07:07</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>3</revnumber><date>2011-09-16 05:50:20</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>2</revnumber><date>2011-09-16 05:43:50</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>1</revnumber><date>2011-09-16 05:43:10</date><authorinitials>masahiko</authorinitials></revision></revhistory></articleinfo><section><title>算術演算</title><section><title>データ型</title><para>数値を扱う基本データ型には次のものがあります。 </para><itemizedlist><listitem override="none"><informaltable><tgroup cols="3"><colspec colname="col_0"/><colspec colname="col_1"/><colspec colname="col_2"/><tbody><row rowsep="1"><entry colsep="1" rowsep="1"><para>型</para></entry><entry colsep="1" rowsep="1"><para>長さ</para></entry><entry colsep="1" rowsep="1"><para>値</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>byte</para></entry><entry colsep="1" rowsep="1"><para>1バイト</para></entry><entry colsep="1" rowsep="1"><para>整数 -128 から 127</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>short</para></entry><entry colsep="1" rowsep="1"><para>2バイト</para></entry><entry colsep="1" rowsep="1"><para>整数 -32,768 から 32,767</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>int</para></entry><entry colsep="1" rowsep="1"><para>4バイト</para></entry><entry colsep="1" rowsep="1"><para>整数 -2,147,483,648 から 2,147,483,647</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>long</para></entry><entry colsep="1" rowsep="1"><para>8バイト</para></entry><entry colsep="1" rowsep="1"><para>整数-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>float</para></entry><entry colsep="1" rowsep="1"><para>4バイト</para></entry><entry colsep="1" rowsep="1"><para>浮動小数点 およそ±3.40282347E+38（６桁）</para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>double</para></entry><entry colsep="1" rowsep="1"><para>8バイト</para></entry><entry colsep="1" rowsep="1"><para>浮動小数点 およそ±1.79769313486231570E+308（１５桁）</para></entry></row></tbody></tgroup></informaltable></listitem><listitem><para>基本データ型のバイト数は処理系によらず決まっています。 </para><itemizedlist><listitem override="none"><para>したがって、扱える値の範囲も決まっています。 </para></listitem><listitem override="none"><para>Cでは処理系により異なる可能性がある。 </para></listitem></itemizedlist></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>演算と型変換</title><para>四則演算はCと同様に記述することができます。 </para><para>計算式の中で型が混在した場合、 次の方向にのみ変換が行われます。 </para><itemizedlist><listitem override="none"><screen><![CDATA[ byte → short → int → long → float → double ]]></screen></listitem></itemizedlist><para>代入時も同様です。 </para><itemizedlist><listitem override="none"><para>Cでは代入時のみ、逆方向の変換も行われます。(Javaでは行われない) </para></listitem></itemizedlist><para>逆方向には変換されません。 </para><itemizedlist><listitem override="none"><para>型変換が必要なときは、キャスト演算子を使います。 </para></listitem></itemizedlist></section><section><title>例１</title><itemizedlist><listitem override="none"><screen><![CDATA[ double a;
 a = 1.25 * 3 * 4;]]></screen></listitem><listitem override="none"><para>代入文の右辺に 1.25 があるため 3 や 4 は double に変換して計算されます。 </para></listitem><listitem override="none"><para>double の計算結果が double型 の変数 a に代入されます。 </para></listitem></itemizedlist></section><section><title>例２</title><itemizedlist><listitem override="none"><screen><![CDATA[ int a;
 a = 1.25 * 3 * 4;]]></screen></listitem><listitem override="none"><para>代入しようとする変数が int型 なので、doublet型 の値は代入できません。 </para></listitem><listitem override="none"><para>Javaではエラーとなります。 </para></listitem><listitem override="none"><para>CではOKでした。 </para></listitem></itemizedlist></section><section><title>例３</title><itemizedlist><listitem override="none"><screen><![CDATA[ int a;
 a = (int)(1.25 * 3 * 4);]]></screen></listitem><listitem override="none"><para>int型の変数に代入するには、演算結果を int に変換してやればよい。 </para></listitem><listitem override="none"><para>型変換を強制するにはキャスト演算子を用います。 </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>infinity, NaN</title><para>整数演算 </para><itemizedlist><listitem override="none"><para>０で割るとエラーになります。 </para></listitem><listitem override="none"><para>演算結果が扱える範囲を超えるとオーバーフローが起こり、変な値になります。 </para></listitem></itemizedlist><para>浮動小数点演算 </para><itemizedlist><listitem override="none"><para>０で割ると infinity(無限大) になります。 </para></listitem><listitem override="none"><para>演算結果が扱える範囲を超えたときも infinity(無限大) になります。 </para></listitem><listitem override="none"><para>-infinity(負の無限大) もあります。 </para></listitem><listitem override="none"><para>infinity を含むなどで計算できない場合に NaN(Not a Number) になることがあります。 </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>演習</title><para><emphasis role="strong">for</emphasis>文を用いて n! を求めるプログラムを作成しなさい。 </para><itemizedlist><listitem override="none"><para>n! = 1 * 2 * ... * n </para></listitem><listitem override="none"><para>printf文を用いて結果を表示させること。 </para></listitem><listitem override="none"><para><emphasis role="strong">１箇所</emphasis>だけ修正すると別の n について計算できるようにプログラムすること。 </para></listitem></itemizedlist><para>ファイル名は Lesson2.java とすること。 </para><para>(1) </para><itemizedlist><listitem override="none"><screen><![CDATA[n = 10 の場合の n! の値を計算し、表示しなさい。]]></screen></listitem></itemizedlist><para>(2) </para><itemizedlist><listitem override="none"><screen><![CDATA[基本データ型のどれを用いると大きな n について n! の正確な値を計算できるか考え、計算できる最大の n! の値を表示しなさい。]]></screen></listitem></itemizedlist><para>(3) </para><itemizedlist><listitem override="none"><screen><![CDATA[数値を扱える基本データ型すべてについて、いくつまでの n について n! の値を計算できるか確かめなさい。]]></screen></listitem></itemizedlist></section></section></article>