|
摘抄一个程序:
int main()
{
char a[1000];
int i;
for(i=0; i<1000; i++)
{
a = -1-i;
}
printf("%d",strlen(a));
return 0;
}
显然有
__________________________________________________________
数组值 | 内存储存形式(补码) | 反码
_________________|________________________|_______________
a[0] = -1 1111 1111
a[1] = -2 1111 1101
. .
. .
. .
a[126]= -127 1000 0001
a[127]= -128 1000 0000
________________________________________
________________________________________
那么接下来呢?
_______________________________________
________________________________________
数组值 | 内存储存形式(补码)
_________________|______________________
a[128]=-129 1 0111 1111 因为溢出所以得到 0111 1111 = 0x7f = 127
a[129]=-130 1 0111 1110 溢出取低八位 0111 1110 = 0xfe = 126 问题在这里产生:
那么其实
a[128] = 127
a[129] = 126
这样对吗 ?? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|