lesson4 2/2 演算 代入演算 インクリメント デクリメント キャスト演算

① 代入演算子

 代入演算子は、元の変数の数値に、代入する変数の数値を、演算子に基づいて代入する。

 そもそも代入は、変数の数値をまるまる入れ替える事。代入演算は、「+=」を使った場合、元のデータ型という「入れ物」の中に入っている数値もプラスするというイメージ。

 

int num1 = 10;

int nam2 = 5;

nam1 = nam1 + nam2

nam1 +=  nam2;

3行目の処理と2行目の処理は同じ。

 

 代入演算子は、四則演算(足し算、掛け算、引き算、割り算)に加えて、%やシフト演算も短く記述できる。

注意事項

 代入演算子を使う場合、あらかじめ宣言を行い、変数を用意する。左側の変数を基に演算を行うので下記のような宣言と代入演算を同時に記述した場合はコンパイルできない。

int nam1 += nam2;

 

代入演算子

a += b  ・・・加算代入  a = a + b

a -= b  ・・・減算代入      a = a - b

a *= b  ・・・乗算代入      a = a * b

a /= b  ・・・除算代入      a = a / b

a %= b  ・・・余剰代入        a = a % b

a <<= b  ・・・左シフト代入     a =  a << b

a >>= b  ・・・右シフト符号あり代入       a = a >> b

a >>>= b  ・・・右シフト符号なし代入    a = a <<< b

※シフト演算(代入も含む)は、整数値型のみ使用可。浮動小数点型、boolen型、参照型は使用不可。コンパイルエラーが出る。

 

② インクリメント、デクリメント

ⅰ  前置インクリメント

 右側の変数の前に「 ++ 」を置く事により、右側の変数の数値を1増やしてから代入する

nam1 = 5;

nam2 = ++nam1; 

上記のコードの場合、mam2は(5 + 1)で6が代入される。nam1は(5 + 1)で6になる。

 

ⅱ 後置インクリメント

nam1 = 5;

nam2 = nam1++;

 右側の変数の後ろに「 ++ 」を置く事により、代入した後に右側の変数を1増やす

上記のコードの場合、nam2には5が代入される。nam1は(5 + 1)で6になる。

 

ⅲ   前置デクリメント、後置デクリメント

 上記のインリメント「 ++ 」を「 -- 」マイナスに置き換えたをデクリメントという。代入に関しての概念は同じでデクリメントは、1を減らす

 

③ キャスト演算

 データ型の異なった変数同士を代入する場合、エラーが起きて代入できない場合や、コンパイルできても、端数が切られてしまい、数値の一部が失われてしまう場合がある。違う型同士で演算を行った場合、大きなサイズの型に合わせられる。

 

boolen     ・・・ trueまたはfalse

char         ・・・2byte文字(8bit→10進数で1~256迄)  表現範囲¥u0000~¥uffff

byte         ・・・1byte整数(8bit→10進数で1~256迄)  表現範囲-128~-127

short        ・・・2byte整数(16bit→10進数で1~65535迄)  表現範囲 -32768~32767

int            ・・・4byte整数(32bit→10進数で1~2147483647迄)

                           表現範囲  -2147483648~2147483647 

long         ・・・8byte整数(64bit→10進法で1~2^64-1迄)

                           表現範囲  -9223372036854775808~9223372036854775807

float         ・・・4byte単精度浮動小数点数(32bit→10進数で1~2147483647)                                                 表現範囲  1.401298E-45 ~ 3.4028235E+38

                                        -3.4028235E+38 ~ -1.401298E-45

                            有効桁数 上位7桁

double     ・・・8byte倍精度浮動小数点数(64bit→10進法で1~2^64-1迄)

                           表現範囲  ±1.79769313486231570E+308~

                                          ±4.94065645841246544E-324

                           有効桁数 上位15桁

 

ⅰ 小さい型から大きい型に代入する場合

 データ型の変換が自動で行われる。上の表において、代入先のデータ型が、代入するデータ型よりも下に来ているものは、コンパイルできる。

class SampleB
{
    public static void main(String args)
    {
       int a1 = 2252;
       float b1 = a1;
       System.out.println( b1 );

    }
}

注意事項

longをfloatやdoubleに代入した場合、有効桁数よりも下の桁の数値は信頼できない。

longを宣言し数値を代入する際は数値の後ろにlまたはLをつける。

 

ⅱ  大きい型から小さい型に代入する場合

 上記表のデータ型において下から上へと、扱うサイズが大きい型から小さい型に代入する時、コンパイルエラーが発生する。その場合、型を変換する事を明示的にしっかりと記述する。記述方法は、代入元のオペランドの前に代入先のデータ型をカッコでくくる。これがキャスト演算

class SampleB
{
    public static void main(String args)
    {
       float a1 = 222.2f;
       int b1 = (int)a1;//←(int)これにより明示される。

       System.out.println( b1 );

    }
}

 小数点を扱える「float」から、小数点を扱えない「int」に変換するので、小数点以下は切り捨てられる。扱える数値がオーバーした場合も同じく切り捨てられる。

注意事項

floatを宣言し数値を代入する際は数値の後ろにfまたはFをつける。

 

ⅲ  型が異なる同士での演算

 四則演算等の演算子を使った時、型が違う場合は、大きい方の型に変換されてから演算処理を行う。処理の結果も、大きい型で得られる。

 

注意事項

 同型同士で演算を行った場合は、その結果は同型で得られる。例えば、int型同士で割り算をした結果は、整数で返される。少数点以下は切り捨てられるのでキャスト演算を使用する。※大きい型に変換されて処理されるので下記のコードの割られる方、割る方のどちらか一方でも可。

class SampleB
{
    public static void main(String args)
    {
       int a1 = 22;
       int b1 = 5;
       double ans1 = (double)a1/(double)b1;  // double ans1 = a1/(double)b1;でも可
       System.out.println( ans1 );

    }
}

上記コードの結果は「4.4」

※キャスト演算を使用せず、結果のデータ型だけ指定しても、データ型int同士の割り算になるので、得られる結果に演算結果の少数点反映されない。ただ、doubleなので丁寧に小数点まで表示される。

class SampleB
{
    public static void main(String args)
    {
       int a1 = 22;
       int b1 = 5;
       double ans1 = a1/b1;
       System.out.println( ans1 );

    }
}

上記に表示されるのは、「4.0」