記憶できるカウント(unsigned short int型)
RI装置のデータはshort int型が多いのではと前ページで記述しました。ここはあまり画像処理には関係がないかもしれませんがメモリーへの記憶のされ方を書いておきますので興味ある方はお読みください。
(注意:ここでの説明はメモリーへの記憶のされ方を自分なりにわかるように記述しましたが、実際のコンピュータ内では2進数どうしの加算や乗除などがおこなわてています。説明のような方法ではありませんのでご容赦ください。わかり易く書いただけです。)
short int型はマイナスの値を記憶させたり表示できるが・・・・・
short int型は先の説明で-32768〜32767の数字があつかえると言いました。ここでメモリーへの記憶のされ方をこのshort int型で説明しますと難しくなりますので、はじ めは整数 0〜65535(符号なし)が扱えるunsigned short int型について記述します。その後でshort int型を考えてみます。
512×512×16bitで収集している装置に1ピクセル当たり100カウントのRIが計測されたら?
この装置はunsigned short int型(16bit=2バイト)で1ピクセル当たりのカウントが記憶できるものだと仮定して100カウントが1ピクセルに入ったときのコンピュータへの記憶のされ方を覚えましょう。
A 整数 0〜65535(符号なし)が扱えるunsigned short int型が準備さてれているコンピュータ
unsigned short int型は16bit(8bit+8bit)であるので8個のメモリーが2組準備されています。
100カウントはどのように記憶され元にもどすときにはどのようになっているのでしょうか?
1)100を256で割る 100÷256=0・・・100(余り)
2)商0を2進数に変換(8bit)する 00000000
3)余り100を2進数に変換(8bit)する
(100を2で割ってそのときの余り(0)を出す。次も前の計算で割って得られた答え(50)を2で割りそのときの余り(0)を出す。次も割って得られた答え(25)を2で割り余り(1)を出す。このように割った得られた答えが2で割れるところまで計算して余りを出す。)
2)100 | 余り・・・0 |
2) 50 | 余り・・・0 |
2) 25 | 余り・・・1 |
2) 12 | 余り・・・0 |
2) 6 | 余り・・・0 |
2) 3 | 余り・・・1 |
2) 1 | 余り・・・1 |
0 |
4)計算した余りを反対から並べ変える。
(100を2で割っていった余りを順に並べると「0010011」になります。この順を反対から記述すると「1100100」となります。この「1100100」が100を2進数に直し たものとなります。)
5)以上のことから余り100は2進数では次のように表せられた。 1100100
6)16bit(16個の箱)を準備していますから、後ろの8個の箱に、商0の2進数「00000000」を入れる。
7)次に余り100の2進数「1100100」を 前の8個の箱に入れる。
注) メモリーは8bitが1組(8個の箱が1つの組)になっています。「1100100」は7個の数字しかありませんから8個の箱に「1100100」を入れるには。箱の右詰に数字 を入れるようにしてください。そうすると左側の箱は空白になりますので、そこには0を入れてください。あとの余っている箱には0を入れてください。)
0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
8)コンピュータが2進数を読み出すときにの考え方
私たちは10進数を使っていますから、画面にカウント値を表示すさせたりするには2進数のままでは不都合です。この上の箱の2進数を10進数に変えてみます。
0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
はじめの8bitの2進を10進数に変えます。10進数への変換は次の計算をします。。
10進数への変換は下の図のように各箱の値に2進数の上に書いた27 26 25 24 23 22 21 20を乗じて足し合わせればよいのです。
0×27 + 1×26 + 1×25 +0×24 + 0×23 + 1×22 + 0×21 + 0×20 = 100
(0) ( 64 ) ( 32 ) (0) (0) (4) (0) (0)
27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | |||||||||
0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
すると10進数で示すと
100 | 0 |
となります。
次の約束は10進数の箱に次のような約束をしておきます。
×0 | ×256 |
a | b |
bに256を乗じてaを加えます。
b×256 + a
先の箱の a=100 b=0 でしたから 0×256+100=100
これが得られた答えです。
では500カウントはどのように記憶され元にもどすときにはどのようになっているのでしょうか?
書きこみ
1) 500÷256=1・・・・244(余り)
2) 商 1を2進数に変換(8bit)する。 00000001
3) 余り 244を2進数に変換(8bit)する。 11110100
4) 後ろの8個の箱(8bit)に商の1 「00000001」を入れる。
5) 前の8個の箱(8bit)に余りの244 「11110100」を入れる。
1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
読み出し
6) はじめの8個の箱の「11110100」を10進数に変換する。 1110100 → 244 これを a とする。
7) 次の8箱の箱の「00000001」を10進数に変換する。 00000001 → 1 これを b とする。
8) b×256 + a を計算する。 1×256+244=256+244=500
以上
くどいようですけど
では65535カウントの時は?
書きこみ
1) 65535÷256=255・・・・255(余り)
2) 商 255を2進数に変換(8bit)する。 11111111
3) 余り 255を2進数に変換(8bit)する。 11111111
4) 後ろの8個の箱(8bit)に商の255 「11111111」を入れる。
5) 前の8個の箱(8bit)に余りの255 「11111111」を入れる。
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
読み出し
6) はじめの8個の箱の「11111111」を10進数に変換する。 1111111 → 255 これを a とする。
7) 次の8箱の箱の「11111111」を10進数に変換する。 11111111 → 255 これを b とする。
8) b×256 + a を計算する。 255×256+255=65280+255=65535
以上
65536以上のカウントのときは?(65536カウントについて考えます)
1) 65536÷256=256・・・・0(余り)
2) 商 256を2進数に変換(8bit)する。 100000000
ここでストップです。256の2進数は「100000000」となり1と0が9個となります。準備してる箱は8個の箱が2組で
すので、はじめの箱に余り0(10進数)→00000000(2進数)は入るのですが、次の商が入る箱は8個しか準備されていませんので、256の2進数「100000000」の9個の1と0は入ることができません。
ですから16bitの箱を準備しているunsigned short int型では最大で65535カウントまでしか数えられないと言うことです。