変数のストレージの深さ

1771 ワード

変数値の記憶変数が定義されると、システムは実行時にその変数に対応するサイズの記憶空間を割り当て、記憶ユニットと呼ぶ.変数に値を割り当てると、その変数に対応するメモリセルにその値が格納されます.この値を変数の値と呼びます.では、変数の値は変数のメモリセルでどのように表されているのでしょうか.(1)整数は符号化された形で格納される.(正数の補符号はそれ自体であり、負数の補符号は原符号でビット別に逆加算1をとる)例えばint a=2,b;       b= -2;(ここでintは2バイト)
a 00000000 00000010
b 11111111 11111110
2の原符号表示:00000000000010-2の補符号表示:11111111 11101+1=1111111111 11110
 
(2)特殊な場合:最大、最小、0のストレージ
最大値:2^15-1(32767):
0
1111111
11111111
16
9~15
1~8
最小値:-2^15(-32768)
1
0000000
00000000
16
9~15
1~8
0のストレージは次のとおりです.
0
0000000
00000000
16
9~15
1~8
(3)範囲外の場合(オーバーフロー)
①、次のセグメントを読み、セグメントの出力結果は()
int i=65536;  printf(“%d”, i );
    A)65536  B)0   C)     ,        D)1
   :65536=216, :1 00000000 00000000, 17   1,  16   0。       16 , 16 0。    0。

 
②、次のセグメントがあれば、出力結果は()
 
int a=32768;  printf(“%d”, a);   
  :32768=215,  10000000 00000000, 16   1,  15   0。       16 ,    1,    -32768。

③、次のセグメントがあれば、出力結果は()
int a=65549;  printf(“%d”,a);   65549=1 00000000 00001101B   (13)
int b=131069;  printf(“%d”,a);   131069=1 11111111 11111101B  (-3)

32ビットのコンピュータの中で
int a = -65536;
short b = a;
a = b;
a=?

intストレージで-65536=1000000 00000000 00000000 00000000
だからshortはintの後ろの2バイトしか取りません.
a=0
 
例えばa=65533
a=00000000 00000000 11111 11111101
bは、符号付きshort=11111111 11111101=-3(-3は、コンピュータの記憶形式では、補符号00000000001)