变量值的存储
变量被定义以后,系统在运行时会为该变量分配一个相应大小的存储空间,称为存储单元。
给变量赋值后,该变量对应的存储单元中会存放该值,这个值称为变量的值。
那么变量的值在变量的存储单元中是如何表示的呢?
(1)整数是以补码的形式存放的。
(正数的补码是其本身,负数的补码为原码按位取反加1)
如:int a=2, b; b= -2; (这里int是2个字节)
a 00000000 00000010
b 11111111 11111110
2的原码表示:00000000 00000010
-2的补码表示:11111111 11111101+1=11111111 11111110
(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 = 10000000 00000000 00000000 00000000
所以short只取int后面两个字节。
a=0
如a=65533
则a = 00000000 00000000 11111111 11111101
b是有符号的short = 11111111 11111101 = -3