首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

整数溢出解决思路

2012-04-28 
整数溢出代码:#includestdio.hint main(){int lshort schar cl0xdeadbeefslclprintf(l0x%x(%

整数溢出
代码:
#include<stdio.h>
int main()
{
  int l;
  short s;
  char c;
  l=0xdeadbeef;
  s=l;
  c=l;
  printf("l=0x%x(%d bytes)\n",l,sizeof(l));
  printf("s=0x%x(%d bytes)\n",s,sizeof(s));
  printf("c=0x%x(%d bytes)\n",c,sizeof(c));
  return 0;
}

输出结果为:
l=0xdeadbeef(4 bytes)
s=0xffffbeef(2 bytes)
c=0xffffffef(1 bytes)

想问的是:l、s、c每个变量的长度不同,为什么超出s变量长度的部分输出的是0xffff,觉得超出部分应该切掉了,打出来的应该是0x0000。这里为什么是ffff呢?

[解决办法]
google 符号扩展
[解决办法]
其实到底是0x0000或者是0xffff是由系统来提供的。
[解决办法]
有符号的类型系统会加上0xff补全
[解决办法]
有些是用0补全,有些是用1补全
[解决办法]
f应该是系统给的把

热点排行