Chinaunix首页 | 论坛 | 博客
  • 博客访问: 667575
  • 博文数量: 150
  • 博客积分: 4070
  • 博客等级: 中校
  • 技术积分: 1795
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-23 21:44
文章分类

全部博文(150)

文章存档

2012年(1)

2011年(123)

2010年(26)

分类: C/C++

2010-12-24 15:44:06

问:一个int型变量的最大允许值为32767,如果在加1,会出现什么情况?

答:第一步:32767的二进制表示为0111 1111 1111 1111

 第二步:0111 1111 1111 1111加1为1000 0000 0000 0000

第三步:由于是有符号的int,而二进制的最高位是1,因此被认为是存储的负数

第四步:负数是以补码的形式存储的,而负数的补码计算方式是先对x取绝对值,再取反,再加1

第五步:按照求补码的步骤反过去计算1000 0000 0000 0000对应的正数,1000 0000 0000 0000减1得0111 1111 1111 1111 1111,在取反得 1000 0000 0000 0000,而1000 0000 0000 0000对应的正数为32768,而最原始的1000 0000 0000 0000是表示的负数,因此int型变量的最大允许值为32767,如果在加1将造成溢出,最后相加的结果为-32768.

同理可以推出当char 的最大值为127时,加1后出现的结果

 

 

阅读(555) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~