变量的存储深入

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

0111111111111111
169~151~8

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

1000000000000000
169~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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值