フィールド内では、計算ができる。その結果に型を指定し格納できる「代入」。
この時、プラス・マイナス・かける等の直接指示を出す記号が、「演算子(オペレーター)」。対して、演算の対象となる「変数」を「オペランド」と呼ぶ。これを組み合わせて式をつくる。こんがらない様に宣言から計算結果の流れを記述する。
int num1; //データ型を宣言
num1 = 5; //数値を代入し初期化※数値は何でも良い
num1 = 7 + 9; //num1に7プラス9の解を代入
int num1 = 7 + 9; //上記3行を1行にしたもの
②シフト演算
シフト演算は左側の数値(下記の場合は20)を2進数にした上で右側(下記の場合は2)の基数分だけ演算子の向きに従いビットシフトする。
byte nam1;
byte num2;
nam1 = 20 << 2;
num2 = 20 >>>2;
ⅰ. 左シフト num1
20を2進数に変換し、2ビット(桁)分左にずらす。
この時、左端からはみ出た部分は切り捨てられ、空いた右側の部分には0が挿入される。
10進数の20は、2進数にすると
「0001 0100」
これを左に2ビットずらすと
「0101 0000」になる。 ※10進数へ変換すると「80」。num1には、80が代入される。
結果、左シフトは4倍の数値が返される事になる。
ⅱ. 右シフト(符号なし) num2
20を2進数に変換し、2ビット(桁)分右にずらす。
この時、右からはみ出た部分は切り捨てられ、空いた左側の部分には0が挿入される。
10進数の20は、2進数にすると
「0001 0100」
これを右に2ビットずらすと
「000 0101」になる。 ※10進数に変換すると「5」。num2には、5が代入される。
結果、右シフトは1/4の数値が返される事となる。
しかし、正の数の時は1/4になるが、負の数の時は、1/4にはならない。
ⅲ. データ型のマイナス表記の概念
「byte型」を例に記述する。データ型のbyteは1byte整数で「-128~+127」まで格納できる。
1byte→8bit
1bitは、1桁の0と1
2bitは、2桁の0と1
・
・
7bitは、7桁の0と1
8bitは、8桁の0と1
1byte(8bit)は、8桁の1と0で表現できる数になる。
X桁のY進数で表せる最大の数は、「YのX乗-1」で表す。
8bitは、8桁の2進数になるので、
(2×2×2×2×2×2×2×2)-1=(256)-1
マイナスと0の表記があるので、10進法で表現できる数は、(256-1)の半分である。よって「-128~+127」になる。
byte型は、8桁の2進数(0000 0000~1111 1111)でデータを区別している。※10進数では「0~255」
コンピュータでは、(256-1)のうち半分を割り当てている負の数を、2の補数と呼ばれる方法で表現する。
補数とは、全ビットを反転させて1を加えたものである。
「0000 0001」 →反転→ 「1111 1110」 →1を加える→ 「1111 1111」
2進数の「0000 0001」は10進数では「1」でbyte型でも「1」となる。
2進数の「1111 1111」は10進数では「255」でbyte型では「-1」 となる。
※byte型は127までしか格納でないので255は表現できない。
2進数の「1111 1110」は10進数では「254」でbyte型では「-2」となる。
2進数の「1111 1101」は10進数では「253」でbyte型では「-3」となる。
コンピュータでは、何ビットで表せるかを先に決めて、上位の空いた桁数を0で埋めておいて0で始まる2進数は正の数で、1で始まる2進数は負の数と判断する。
ⅳ. 右シフト(符号あり)
byte num3
num3 = 20>>2
20を2進数に変換して、2ビット分左にずらし、はみ出た部分は切り捨てまでは同だが、空いた部分の先頭は、もともと「1」であったら「1」をもともと「0」であったら「0」が挿入される。
結果、マイナスの符号付きの場合であっても、1/4の数値が返される事となる。