变量的存储深入

来源:互联网 发布:云免数据库怎么登陆 编辑:程序博客网 时间:2024/04/30 01:57

 变量值的存储
变量被定义以后,系统在运行时会为该变量分配一个相应大小的存储空间,称为存储单元
给变量赋值后,该变量对应的存储单元中会存放该值,这个值称为变量的值
那么变量的值在变量的存储单元中是如何表示的呢?
(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):

0111111111111111169~151~8

最小值:-2^15    (-32768)

1000000000000000169~151~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(-3在计算机的存储形式是补码00000000 00000011)

原创粉丝点击