整数溢出
代码:
#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应该是系统给的把