int = 32bit ですよね(32bit)
最近の環境が4byteが多いだけでint型のサイズは環境によって変わりません、固定的に4byte=32bitというのは間違いです。
char = 8bit(1Byte)なので「int型というのはchar型が4個ある配列のようなもの」という理解で正しいのでしょうか?
エンディアン
というメモリへの値の配置方法があり、ビッグエンディアン/リトルエンディアンで並び方が異なります。charのように1byteの場合はあまり影響がないですが、複数バイトの型の場合には注意が必要で、intが4byteの環境で単純にcharが4つ並んだものという考えは間違いです。
ユーザーのアドレス空間とかで例をあげると数値が見えにくく理解しづらいと思うので、現実ではありえないけどとても単純かします。
例えば
intが4byteの環境でリトルエンディアンで
int型で要素数が4つの配列 arr_int
cahr型で要素数が4つの配列arr_char
があったとします。
arr_int[0] = 10;
arr_int[1] = 20;
arr_int[2] = 30;
arr_int[3] = 40;
arr_char[0] = 10;
arr_char[1] = 20;
arr_char[2] = 30;
arr_char[3] = 40;
これらの先頭アドレスが例えば10番地というアドレスだったとします。
そうすると
charのほうは
10番地に10(2進数で0000 1010)
11番地に20(2進数で0001 0100)
12番地に30(2進数で0001 1110)
13番地に40(2進数で0010 1000)
というようにメモリに配置される、これがintの場合
10番地に 0000 1010
11番地に 0000 0000
12番地に 0000 0000
12番地に 0000 0000
14番地に 0001 0100
15番地に 0000 0000
16番地に 0000 0000
17番地に 0000 0000
18番地に 0001 1110
19番地に 0000 0000
20番地に 0000 0000
21番地に 0000 0000
22番地に 0010 1000
23番地に 0000 0000
24番地に 0000 0000
25番地に 0000 0000
という風に値が格納される
なのでここでいうint配列の先頭アドレスは10番値で10番値から4byte分をひとかたまりとしてみてくださいねという意味です。逆にcharの場合は10番値の1byteだけみてくださいねという意味になります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/29 14:36