型 | 値 | サイズ | 定数の例 |
byte | 符号付き整数 | 8ビット | 100 |
short | 符号付き整数 | 16ビット | 1000 |
char | 符号なし整数 | 16ビット | 'c' |
int | 符号付き整数 | 32ビット | -1000000 |
long | 符号付き整数 | 64ビット | 100000000 |
float | 浮動小数点数 | 32ビット | -3.45e+4 |
double | 浮動小数点数 | 64ビット | 4.195e-300 |
char は文字コードを表すもの.UNICODE と呼ばれる世界中の文字を16ビット で表すことを目指したコード系を用いて文字を整数に変換する.プログラム中 ではchar型の定数は,「'a'」のように表す.ASCII文字についてはASCIIの8ビットのコード(man ascii で見られる)と一致している(例 'a' -> 97).
float, doubleは実数データを表すのに用いる.浮動小数点数というのは, 実数を2進法で表した時の桁数を表すビット(指数部)とその時の上位の桁 を表すビット(仮数部)によって表現する. -3.45e+4 という定数は, -3.45 に 10の4乗(=10000)を掛けた数. すなわち-34500を表す.
優先順位 | 演算子 | 扱うデータ型 | 結合規則 | 演算の内容 |
1 | + | 数値 | 右 | 単項演算子のプラス |
1 | - | 数値 | 右 | 単項演算子のマイナス |
2 | * | 数値 | 左 | 乗算 |
2 | / | 数値 | 左 | 除算 |
2 | % | 数値 | 左 | 剰余 |
3 | + | 数値 | 左 | 加算 |
3 | - | 数値 | 左 | 減算 |
5 | < | 数値 | 左 | より小さい |
5 | <= | 数値 | 左 | 以下 |
5 | > | 数値 | 左 | より大きい |
5 | >= | 数値 | 左 | 以上 |
6 | == | 基本データ型 | 左 | 等しい |
6 | != | 基本データ型 | 左 | 等しくない |
13 | = | 左辺は変数 | 右 | 代入 |
優先順位, 結合規則は, 複数の演算子を含む式をどう解釈するかを表す. たとえば,
1 + 2 * 3は, '*'の優先順位が'+'よりも高いので, 2 と 3の乗算の実行後に1との加算 をおこなうということになる. これを1と2の加算の実行後に3と乗算するよう に変更するには,
(1+2)*3のように書けば良い.
式を自然に書けない言語もある.たとえば,Lispという言語では (1+2)を表
現するのに,(+ 1 2) という前置記法を用い,Forth という言語では1 2 + と
いう逆ポーランド記法を用いる.それぞれの方法にメリットがあり熱狂的なファ
ンも多いが,主流となる言語は中置演算子を用いてきた.
実数は整数と濃度が違うとい
う集合論の理論でもあきらかなように,すべての実数が2進数で表せるわけで
はない.したがって,計算機で実数を扱う場合は何らかの近似を行う.そのた
め,実数演算をおこなう場合は誤差を無視することができない.たとえば,
(1.0/3.0)*3.0 は誤差が入るため,1.0とは違う.
のように書けば良い.
式を自然に書けない言語もある.たとえば,Lispという言語では (1+2)を表
現するのに,(+ 1 2) という前置記法を用い,Forth という言語では1 2 + と
いう逆ポーランド記法を用いる.それぞれの方法にメリットがあり熱狂的なファ
ンも多いが,主流となる言語は中置演算子を用いてきた.
実数は整数と濃度が違うとい
う集合論の理論でもあきらかなように,すべての実数が2進数で表せるわけで
はない.したがって,計算機で実数を扱う場合は何らかの近似を行う.そのた
め,実数演算をおこなう場合は誤差を無視することができない.たとえば,
(1.0/3.0)*3.0 は誤差が入るため,1.0とは違う.
class Pow10{ public static void main(String[] args){ int n; for(n=100;n<=10000000000;n=n*10) System.out.println("n = "+n); } } ktanaka@ux111> java pow10 n = 100 n = 1000 n = 10000 n = 100000 n = 1000000 n = 10000000 n = 100000000 n = 1000000000 n = 1410065408 n = 1215752192 n = -727379968 n = 1316134912 n = 276447232 n = -1530494976のように整数の場合は,桁あふれを起こしても,エラーを出さずに間違った値が 入ってしまうので注意が必要になる.32ビット(2進数で32桁)しか表せない int 型 の代わりに64ビット(2進数で64桁)表せる long 型を使って,
class Pow10{ public static void main(String[] args){ long n; for(n=100;n<=10000000000;n=n*10) System.out.println("n = "+n); } }と書くと,
ktanaka@ux019> java Pow10 n = 100 n = 1000 n = 10000 n = 100000 n = 1000000 n = 10000000 n = 100000000 n = 1000000000と正しい結果が得られるが,表せる数に限りがあることは忘れないように.