JavaプログラミングⅠ

Similar documents
JavaプログラミングⅠ

JavaプログラミングⅠ

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

プログラミング実習I

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

Java講座

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

System.out.println("char : " + (int)character.min_value + "~" + (int)character.max_value); System.out.println("float : " + Float.MIN_VALUE + "~" + Flo

JavaプログラミングⅠ

JavaプログラミングⅠ

Prog1_2nd

JavaプログラミングⅠ

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

Microsoft Word - no02.doc

JavaプログラミングⅠ

PowerPoint プレゼンテーション

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

JavaプログラミングⅠ

PowerPoint プレゼンテーション

JavaプログラミングⅠ

Microsoft PowerPoint - CproNt05.ppt [互換モード]

Microsoft Word - java a.doc

プログラミングA

Java Java Java Java Java 4 p * *** ***** *** * Unix p a,b,c,d 100,200,250,500 a*b = a*b+c = a*b+c*d = (a+b)*(c+d) = 225

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

class TestPrimitiveType{ public static

Microsoft PowerPoint - 3.ppt [互換モード]

Microsoft Word - 商業-3

スライド 1

Microsoft PowerPoint - 4.ppt [互換モード]

Microsoft PowerPoint - class2-OperatorOverLoad.pptx

プログラミング入門1

マークアップ言語

プログラミング入門1

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf


gengo1-2

Microsoft Word - 3new.doc

K227 Java 2

Prog1_6th

1. 関数 scanf() 関数 printf() は変数の値を画面に表示しますが それに対し関数 scanf() はキーボードで入力した値を変数に代入します この関数を活用することで対話式 ( ユーザーの操作に応じて処理を行う ) プログラムを作ることができるようになります 整数の和

Java知識テスト問題

Java プログラミング Ⅰ 11 回目多次元配列 2 次元配列 2 次元配列配列要素が直線上に並ぶ一次元配列に対して 平面上に並ぶ配列要素をもつ配列 直観的には 2 次元配列の準備配列変数の宣言は型と識別子を指定して次のように行う 型識別子 [ ][ ]; または 型 [ ][ ] 識別子 ; 配

ガイダンス

3,, となって欲しいのだが 実際の出力結果を確認すると両方の配列とも 10, 2, 3,, となってしまっている この結果は代入後の配列 a と b は同じものになっていることを示している つまり 代入演算子 = によるの代入は全要素のコピーではなく 先をコピーする ため 代入後の a と b は

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

JavaScriptプログラミング入門 2.JavaScriptの概要

Prog1_10th

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog03.ppt

kantan_C_1_iro3.indd

プログラミング基礎

PowerPoint プレゼンテーション

プログラミングA

教材ドットコムオリジナル教材 0から始めるiアフ リ リファレンス i アプリ簡易リファレンス ver i アプリ Java 独自のメソッド (1)iアプリの命令を使えるようにする import com.nttdocomo.ui.*; (2) 乱数を使う import java.u

数値計算

8 / 0 1 i++ i 1 i-- i C !!! C 2

Assignment_.java 0 Assignment_.java 課題 : 台形の面積 / class Assignment_ public static void main(string[] args) throws IOException キーボード準備 int top, bottom,

講習No.1

JavaScriptで プログラミング

sinfI2005_VBA.doc

Prog2_9th

Microsoft PowerPoint - class04.ppt

Javaによるアルゴリズムとデータ構造

Microsoft PowerPoint - 3.pptx

プログラミング入門1

プログラミングA

謗域・ュ逕ィppt

2016 年度 JAVA 講座第六週目 目次 パッケージ... 2 パッケージの作成... 2 パッケージの使用方法... 3 異なるパッケージ同名クラスの宣言... 4 パッケージの側面から見たアクセス修飾子... 4 ラッパークラス... 5 ラッパークラス利用法:キャスト... 5 ラッパーク

PowerPoint プレゼンテーション

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

Microsoft PowerPoint - C1(演算と変数).ppt

JavaプログラミングⅠ

計算機プログラミング

第 1 回 C 言語講座 1. コンピュータって? だいたいは 演算装置 制御装置 記憶装置 入出力装置から構成されている 演算装置 CPU の一部で実際に計算を行う装置 制御装置 CPU の一部で演算装置や入出力装置 記憶装置の読み書きなどを制御する装置 記憶装置プログラムや情報 データを一時的

PowerPoint Presentation

謗域・ュ逕ィppt

第2回講義:まとめ

プログラミング基礎

Prog1_3rd

Taro-ビット処理(公開版).jtd

スライド 1

ポインタ変数

1

Microsoft Word - Cプログラミング演習(11)

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

2

Microsoft Word - VBA基礎(2).docx

5

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

文法と言語 ー文脈自由文法とLR構文解析2ー

本サンプル問題の著作権は日本商工会議所に帰属します また 本サンプル問題の無断転載 無断営利利用を厳禁します 本サンプル問題の内容や解答等に関するお問 い合わせは 受け付けておりませんので ご了承ください 日商プログラミング検定 STANDARD(C 言語 ) サンプル問題 知識科目 第 1 問 (

Microsoft PowerPoint ppt

4 ソフトウェア工学 Software Engineering 抽象データ型 ABSTRACT DATA TYPE データ抽象 (data abstraction) 目的 : データ構造を ( 実装に依存せずに ) 抽象的に定義 方法 : データにアクセス (read, write) する関数の仕様

Microsoft PowerPoint - program.ppt [互換モード]

情報システム設計論II ユーザインタフェース(1)

Microsoft Word - Cプログラミング演習(12)

Microsoft PowerPoint - prog09.ppt

解答編 第 7 章実数型の計算と標準数学関数 演習問題 7.1 文法事項 1 ) 暗黙の型変換とは何か答えなさい 代入演算子 (=) や算術演算子 (+,-,*,/,%) では 2 つの演算項のデータ型が揃っている事が必要です 2 つの演算項のデータ型が異なる場合 可能ならば 演算項のデータ型を変換

Transcription:

Java プログラミング Ⅰ 5 回目演算子の優先順位と変数の型変換 今日の講義で学ぶ内容 演算子の優先順位 優先順位の変更の方法 キャスト演算子と型変換 演算子の優先順位 演算子の優先順位 式を計算するときの演算の順序です例えば a=b*c+d; では乗算を先に計算するというルールです ( 主な演算子の優先順位 ) 演算子 名前 結合規則 ++ 後置インクリメント 左 -- 後置デクリメント 左! 論理否定 右 ~ 1の補数 ( 反転 ) 右 + プラス 右 - マイナス 右 ++ 前置インクリメント 右 -- 前置デクリメント 右 ( ) キャスト 右 * 乗算 左 / 除算 左 % 剰余 左 + 加算 ( 文字列連結 ) 左 - 減算 左 << 左シフト 左 >> 右シフト 左 >>> 符号なし右シフト 左 > より大きい 左 >= 以上 左 < 未満 左 <= 以下 左 == 等価 左!= 非等価 左 & ビット論理積 左 ^ ビット排他的論理和 左 ビット論理和 左 && 論理積 左 論理和 左? : 条件 右 = 代入 右 +=,-= など複合代入演算 右 優先順位は同じ 優先順位が高い 私たちが普段行うように加算や減算よりも乗算や除算の方が優先順位が高いです 代入演算子は 優先順位が最も低く最後に処理されます 優先順位が低い - 1/9 -

左結合 右結合 優先順位が等しい場合 左側から順に演算をする規則たとえば a * b % c / d; の場合 a * 1 b % 2 c / 3 d; となります 優先順位が等しい場合 右側から順に演算をする規則たとえば ~++a; の場合 ~ 2 ++ 1 a; となります ソースコード例ソースファイル名 :Sample5_1.java // 演算子の優先順位 class Sample5_1 int a=6, b=2, c=5; int d1, d2, d3; String str1; 代入演算子 = は演算結果を持ちます 右辺の値を左辺に代入します 式の演算結果は代入された値です例えば int d; System.out.println(d=6); とすると 画面には 6 と出力されて d には 6 が代入されます // すべて等しい優先順位かつ右結合の演算子なので右側から順に演算 d1=d2=d3=0; d1 = 3 d2 = 2 d3 = 1 0; // 加算より乗算の優先順位が高い d1=a+b*c; // 加算より剰余の優先順位が高い d2=c%b+a; d1 = 3 a + 2 b * 1 c ; d2 = 3 c % 1 b + 2 a; // 乗算と除算の優先順位は同じかつ左結合の演算子なので左側から順に演算 d3=a/b*c; d3 = 3 a / 1 b * 2 c; // 加算より除算の優先順位が高いかつ加算は左結合の演算子なので左側から // 順に演算 // ( 重要 ) 加算ではオペランドに文字列がある場合は 文字列連結となる str1=a/b+" 文字列 "+b+c; str1 = 5 a / 1 b + 2 " 文字列 " + 3 b + 4 c; System.out.println("a=" + a + ", b=" + b + ", c=" + c); System.out.println("a+b*c = " + d1); System.out.println("c%b+a = " + d2); 加算演算子 + System.out.println("a/b*c = " + d3); 文字列連結として System.out.println("a/b+ " 文字列 "+b+c = " + str1); 機能した場合の演算結果は連結された文字列です - 2/9 -

a=6, b=2, c=5 a+b*c = 16 c%b+a = 7 a/b*c = 15 a/b+" 文字列 "+b+c = 3 文字列 25 ( ) による演算子の優先順位の変更 式のグループ化 式を ( ) で囲みグループにすることにより その部分の演算を他より先に行わせることができます たとえば ( a + b ) * c; の場合 ( a + 1 b ) * 2 c; となります 括弧は 入れ子 ( 括弧の中にさらに括弧 ) にもできますこの場合 最も内側の括弧から演算が行われますソースコード例ソースファイル名 :Sample5_2.java // 演算子の優先順位の変更 class Sample5_2 // 括弧内の演算が先にされ その後は優先順位に従い除算が行われる int a=10/(5-3); System.out.println("10/(5-3)=" + a); // 括弧内の演算が先にされ その後は優先順位に従い剰余 減算と進む int b=(4+17)%2-1; System.out.println("(4+17)%2-1=" + b); // すべて等しい優先順位かつ左結合の演算子なので左側から順に演算 System.out.println("1+2=" + 1+2 + " です "); // 期待通りの結果が得られない System.out.println("1+2=" + (1+2) + " です "); // ( ) により優先順位を変更 // 加算より乗算の優先順位が高い System.out.println("3*4=" + 3*4 + " です "); - 3/9 -

10/(5-3)=5 (4+17)%2-1=0 1+2=12 です 1+2=3 です 3*4=12 です 演算子の優先順位をすべて覚えるのは大変です意図的に ( ) を用いて優先順位を指定するとよいでしょう 値の型変換 型のランク 低い 型は値の表現範囲より次のようにランク付けされていますこれを型のランクといいます 高い byte short int long float double char 値の型変換 値の型を変換することですたとえば double 型から int 型 byte 型から int 型の変換です 型変換は型のランクにもとづき区別され処理されます 高いランクへの型変換値は拡張されます ( 拡大変換といいます ) たとえば int 型 2 double 型 2.0 低いほうの型で表現されない情報は 0 で補完されます 低いランクへの型変換値は切り捨てられます ( 縮小変換といいます ) たとえば double 型 2.5 int 型 2 低いほうの型で表現される情報だけ残ります - 4/9 -

型変換はいつ行われる? 1 変数に値を代入するとき 2 演算を行うとき 1 変数に値を代入するときの拡大変換と縮小変換 高いランクの変数へ代入 自動的に型の拡大変換が行われますたとえば int i = 5; double d = i; OK 低いランクの変数へ代入自動的な縮小変換は行われません!! 例えば 縮小変換では 情報が失われます プログラマがこれを承知して行っているかかどうか Java が判断できないため エラーを出します double d = 5.5; short s = d; エラー このようなコードをコンパイルしたら 精度が落ちている可能性 というコンパイルエラーがでます キャスト演算子により明示的に型変換を行います キャスト演算子 ( ) 式の値を ( ) 内で指定した型に一時的に型変換します 演算結果は一時的に型変換された値です ( 型 ) 式 コード例 (int)a コード例 (double)10 先ほどの例では double d = 5.5; OK short s = (short)d; とすれば 明示的に型の縮小変換が行われ 変数 s に 5 が代入されます キャスト演算は一時的な型変換ですので このとき変数 d の値は 5.5 のままです 一般に キャスト演算子は型の拡大変換にも使えますたとえば int 型の値を double 型に拡大変換を行う場合は int i = 5; double d = (double)i; とすれば 明示的に型の拡大変換が行われます - 5/9 -

キャスト演算子と演算子の優先順位変更の記号は どちらも ( ) ですきちんと区別して間違えないようしましょう!! キャスト演算子の場合は括弧の中には型を書きます 優先順位変更の場合は括弧の中には式を書きますたとえば int a; a = (int)(3.2 + 1.9); とすれば ( ) はキャスト演算子 ( ) は優先順位変更で 変数 a の値は 5 です ソースコード例ソースファイル名 :Sample5_3.java // 代入時の型変換 class Sample5_3 byte a; int b; double c; // int 型から double 型への型変換 b = 2; c = b; // 高いランクの型への変換 System.out.println("int 型 " + b + " -> double 型 " + c); // double 型から int 型への型変換 c = 2.5; b = (int)c; // 低いランクの型への変換キャスト演算子必要 // キャスト演算は一時的な型変換なので変数 c そのものの値は変化しない System.out.println("double 型 " + c + " -> int 型 " + b); // int 型から byte 型への型変換 b = 256; a = (byte)b; // 低いランクの型への変換キャスト演算子必要 System.out.println("int 型 " + b + " -> byte 型 " + a); int 型 2 -> double 型 2.0 double 型 2.5 -> int 型 2 int 型 256 -> byte 型 0 256 (10) =1,0000,0000 (2) この値を byte 型 (8 ビット ) で切り取ると 0000,0000 (2) となります - 6/9 -

2 演算を行うときの拡大変換と縮小変換 異なるランクの変数の混在 異なるランクの型が同じ式に混在する場合 演算前に一方のオペランドがランクの高い型に一時的に拡大変換されます 演算後の式の演算結果はオペランドの型の中でランクの高い型になります 例えば 2 * 2.5 2.0 * 2.5 5.0 5 / 2.0 5.0 / 2.0 2.5 byte 型と short 型 char 型のオペランドは 演算前に一時的にランクの高い int 型へ拡大変換されます ソースコード例ソースファイル名 :Sample5_4.java // 演算時の型変換 1 class Sample5_4 int diameter=2; double pi=3.14; // 円周の計算 System.out.println(" 直径が " + diameter + "cm の円の "); System.out.println(" 円周は " + (diameter*pi) + "cm です "); // int 型 *double 型であるため // int 型変数は double 型に変換されて演算されます // 式の値は double 型になります 直径が 2cm の円の円周は 6.28cm です - 7/9 -

ソースコード例ソースファイル名 :Sample5_5.java // 演算時の型変換 2 class Sample5_5 int num1=5; int num2=4; double div; div = num1/num2; System.out.println("5 / 4 は " + div + " です "); 整数同士の除算に要注意!! 整数値や整数型の変数のみからなる足し算や引き算の式では答えは整数ですね しかし 除算を含む場合は小数が出る場合がありますので 演算結果の型の決まり方に注意!! // int 型 /int 型であるため型変換はされず 式の値は int 型になる // このため期待通りの答えが得られない // 一方の変数を double 型にキャスト演算子を用いて拡大変換することで // 演算は double 型で行われる div = ((double)num1)/num2; System.out.println("5 / 4 は " + div + " です "); 5 / 4 は 1.0 です 5 / 4 は 1.25 です - 8/9 -

今日の講義のまとめ 演算子の優先順位は 式の演算の順序を決めます たとえば 乗算演算子は加算演算子よりも優先順位が高いので 先に演算を行います また 代入演算子や複合代入演算子の優先順位は最も低いので 最後に演算を行います 括弧 ( ) を用いることで式の演算の順序を変更することができます 括弧 ( ) の中が先に演算されます 型のランクとは 扱える値の範囲により昇順に並べた型の順番です 一番低いランクの型は byte 型で 一番高いランクの型は double 型です 値の型変換には 拡大変換と縮小変換があります 拡大変換とは ランクの高い型への変換であり 縮小変換はランクの低い型への変換です 拡大変換では値が補われ 縮小変換では値が切り取られます キャスト演算子は 値の型を一時的に変換する演算子です 式の演算結果の型は オペランドの型の中で一番ランクの高い型です 整数型と整数型の割り算の演算結果は整数型になるため 必要に応じてキャスト演算子で拡大変換をします - 9/9 -