变量值的存储
变量被定义以后,系统在运行时会为该变量分配一个相应大小的存储空间,称为存储单元。
给变量赋值后,该变量对应的存储单元中会存放该值,这个值称为变量的值。
那么变量的值在变量的存储单元中是如何表示的呢?
(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 a=32768; printf(“%d”, a); 说明:32768=215,即 10000000 00000000,第16位上为1,后面15位均为0。存储时只能存放16位,最高位为1,故结果为-32768。
③、若有下面的程序段,则输出结果为()
题目:在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(-3在计算机的存储形式是补码00000000 00000011)