求下面代码打印结果:
1. #include<stdio.h> 2. #include<string.h> 3. 4. int main() 5. { 6. char a[1000] = { 0 }; 7. int i = 0; 8. 9. for (i = 0; i < 1000; i++) 10. { 11. a[i] = -1 - i; 12. printf("%d\n", a[i]); 13. } 14. 15. printf("%d", strlen(a)); 16. return 0; 17. }
分析:
(1)当 i = 0~127时,a[i]为:
-1-0,-1-1,-1-2,····,-1-127
即-1,-2 ,-3 ,····,-128
(2)当 i = 128时:
-1-128=-1 +(-128)
计算-1+(-128)
1. 10000000 00000000 00000000 00000001 -1原码 2. 11111111 11111111 11111111 11111110 -1反码 3. 11111111 11111111 11111111 11111111 -1补码 4. 5. 10000000 00000000 00000000 10000000 -128原码 6. 11111111 11111111 11111111 01111111 -128反码 7. 11111111 11111111 11111111 10000000 -128补码 8. 9. 11111111 11111111 11111111 11111111 -1补码 10. 11111111 11111111 11111111 10000000 -128补码 11. 11111111 11111111 11111111 01111111 和 12. 13. char类型截断 14. 01111111 - 127
当 i = 129时:
-1-129=-1 +(-129)
计算-1+(-129)
1. 10000000 00000000 00000000 10000001 -129原码 2. 11111111 11111111 11111111 01111110 -129反码 3. 11111111 11111111 11111111 01111111 -129补码 4. 5. 11111111 11111111 11111111 11111111 -1补码 6. 11111111 11111111 11111111 01111111 -129补码 7. 11111111 11111111 11111111 01111110 和 8. char类型截断 9. 01111110 - 126
因此,当i>=128时,a[i]为127,126,····,1,0
arr的元素为-1,-2 ,-3 ,····,-128,127,126,····,1,0,-1,-2 ,-3 ,····,-128,127,126,····,0,·····
strlen求的是\0之前的字符个数,即第一个0之前的元素个数=255