关于字符的一道很容易做错的题目
来源:互联网 发布:苏州教师网络培训平台 编辑:程序博客网 时间:2024/06/06 03:52
看下面程序:
#include<stdio.h>
int main()
{
char a[1000];
int i,j;
for(i=0;i<1000;i++)
a[i]=-1-i;
printf("%d/n",strlen(a));
return 0;
}
请问上述程序的输出结果是什么?答案是255。
解答该题需要注意以下几点:
1、 数据在机器中是如何存取的?数据在机器中是以补码形式存放的。正数的补码和其原码一致,负数的补码符号位为1,其余位为该数绝对值的原码各位取反然后末位加1。
2、 两个用补码表示的数,如果最高位(符号位)有进位则进位被舍弃。
3、 -1的补码为1111 1111(及0xff),-127的补码为(0111 1111各位取反末位加1得1000 0001)-128的补码为1000 0000(1000 0000各位取反末位加1得到)
4、 char型的取值范围:[-128,127],当数值超过该范围时会发生溢出,变量的值只能从8位存取空间中取。
5、 strlen函数是计算字符串的长度的,并不包含字符串最后面的’/0’,而判断一个字符串是否结束的标志就是看其是否遇到’/0’,如果遇到’/0’,则认为本字符串结束。
明白了上述几点,上述程序题则不难了。a[0]=-1,a[1]=-2……a[127]=-128,然后当i=128时内存中的二进制比特将发生溢出而取得低8位值,a[128]=127,a[129]=126,……a[254]=1,a[255]=0,然后i=256,a[256]= -1这和前面一轮的取值是一样的……
由于strlen计算长度不算最后的’/0’,因此它计算的长度为a[0]~a[254],为255。
- 关于字符的一道很容易做错的题目
- 很简单却很容易做错的一道笔试题
- 容易做错的题目
- C#的继承一道很容易出错的题目
- 做错的题目c/c++
- 一道确实很多人做错的智力题
- 关于继承的一道题目
- 一道关于排序的题目
- 关于fork的一道题目
- 一道关于继承的题目
- 一道关于finally的看似非常简单但很多人都做错的Java面试题
- 做错过的C语法题目
- 做错过的C语法题目
- 做错过的C语法题目
- 做错过的C语法题目
- 很容易错的一道基础题
- 笔试的一道关于测试的题目
- 关于byte的一道有趣的题目
- 额
- 110个oracle常用函数总结
- 重力小球
- [转]《给年轻工程师的十大忠告》
- sqlcommandbuilder进行数据更新
- 关于字符的一道很容易做错的题目
- 必须掌握的八个【cmd 命令行】
- 惠普中国CEO孙振耀退休感言
- Oracle游标
- 我微笑,不代表我快乐。(几米语录)
- 能影响你一生的三十句话!
- C/C++头文件一览
- 不可不看,成功男人的16个“绝招”
- sql