パソコンへの記憶について(符号なし)
収集された画像データがどのようにパソコンのメモリーに記憶されるかはunsigned
short int型のページで説明しましたが、その他の型についても簡単にふれておきます。専門のコンピュタ用語は用いずに記述しているために正確な表現でありませんが参考までに読んでください。
記憶される家(バイト)と部屋(ビット)
1) データは家(バイト)単位で記憶される。
2) 家(バイト)は8個の部屋(ビット)で構成されている。
例
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
3) 8個の部屋(ビット)に入る数字は0と1のみである。(2進数しか利用できない。)
4) 記憶する家(バイト)は最初に決めておく。
(データを収集には、何かの言語で書かれたプログラムソフトがなくてはなりません。この中で、データを記憶する家(バイト)の数が決めてあります。これは変数といいますが、これには決まった規則があります。家(バイト)の数を2建(2バイト)にしようとしたら、プログラム的にはその家の名前をunsigned short intとかshort intにしてあげます。4建(4バイト)にするにはunsigned intやlong intにしてあげればいいのです。)
Byte型
家の名前をByte型にしたら、パソコンではこの家は1建(1バイト)とし、正の整数しか使えないとなります。ここの1建で記憶できる数値は0〜255までとなります。このことを考えてみます。
1) Byte型は家1建ですから部屋は8個(ビット)あることになります。
? | ? | ? | ? | ? | ? | ? | ? |
2) ここに入る数字は0と1のみですから、最大の数は11111111、最小は00000000となります。
最大
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
最小
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
3) 上の数字(2進数)を10進数に変換します。
2進数の11111111を10進数に変換すると255。(11111111→255) 最小である00000000を10進数に変換すると0。
4) 以上からByte型は最小の扱える数字は0〜255までになります。
unsigned short int型
1) 最大の記憶できる数は1111111111111111ですから10進数にしたら65535となります。
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
2) 最小の数は0000000000000000ですから10進数にしたら0となります。
3 )unsigned short int型は0〜65535までの数字が扱えることになります。
unsigned int型
この型は家4建(4バイト)で正の整数のみが使えるものです。家2建ですから部屋は8個×4=36個の部屋があることになります。
1)最大の記憶できる数は11111111111111111111111111111111ですから10進数にしたら4294967295となります。
2)最小の数は00000000000000000000000000000000ですから10進数にしたら0となります。
3)unsigned int型は0〜4294967295までの数字が扱えることになります。
(例)Byte型の家を準備してカウントしていきましょう。
Byte型は8つの部屋です。
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
2)1カウント計測したとします。最下位のビットが1になります。
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
00000001は10進数では1となります。
3)次のカウントがされました。(最下位ビットに1が加わりますと、そこは1ですので最下位ビットは繰り上がって次のビットが1になります。)
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
4)3つ目のカウントです。(最下位ビットは0ですので1が加わり00000011となります。00000011は10進数では3です。)
0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
5)4つ目です。(00000011に1が加わると桁上がりするので00000100となります。00000100は10進数では4です。)
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
6)5つ目です。00000100が00000101になります。00000101は10進数では5です。)
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
このように数が増える度に1が加わり、上記のような規則で桁上がりして数が数えられていくのです
これがADコンバータの役目なのです。
(例題ー1)
10進数の200を2進数に変換する。
1) 200は2進数では11001000となるので
1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
と記憶される。
(例題ー2)
10進数の300を2進数に変換する。
1)300は10進数では100101100となる。
2)100101100の0と1は全部で9個あるので8ビットの部屋では足りないため、その次の8個×2=16ビットの部屋に入れる。
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
と記憶される。
このように16個の部屋を最初に準備すると、1が16個(1111111111111111)まで1度に数えられることになる。
1111111111111111を10進数であらわすと65535である。
(例題ー3)
2進数0000000100101100を10進数に変換する。
1) 8個の部屋で別けて書く。
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
(このまま16個の2進数を10進数に変換すれば300となるがパソコンではそのように読み出されない)
2) はじめの8ビット分000000001と次の00101100に別けて考える。
00000001|00101100ではじめの00000001を10進数に直すと1、次の00101100を10進数に直すと44
3) 00000001に1000000000を乗じる。(10進数で示したら1×256)
4) 次の00101100を3)に加える。00000001(1)×100000000(256)+00101100(44)→300
(注意:この記憶のされかたはモトローラのCPUの考え方でビックエンディアン方式と呼んでいます。インテルでは並び順を反対にしたリトルエンディアン方式となっていますから勘違いしないでください。)
(例題ー4)
10進数66000を2進数に変換する。
1) 10進数の66000を2進数にすると10000000111010000となる。
2) 10000000111010000は全部で17個であるので16ビットの部屋では足りないため、次の32ビットの部屋に入れる。
3) 00000000|00000001|00000001|11010000
4) 3)を10進数にしたら 0|1|1|208
5) 読み出しを10進数で書くと、|0|×256×256×256+|1|×256×256+|1|×256+|208|→66000となる。