概述
刚才在孙晓亮的博客上看到一道C语言面试题,说是一个小问题,但我在看完标题之后都感觉出来他要考察变量类型表示越界问题了,因为以前在电脑鼠的算法程序中有过类似的问题,当时姚司还问过,但当时没想出来,后来才恍然大悟的。下面把这道题贴出来大家一块看看吧。首先声明一下:写这个不是为了装B,本人C语言功底不好,写出来只为大家共同分享,已经看过的人就不需要再看了。
#include <stdio.h>
#define MAX 255
int main()
{
unsigned char a[256],i;
for(i=0;i<=MAX;i++)
a[i]=i;
for(i=0;i<=MAX;i++)
printf("%d ",a[i]);
}
大家看看有什么错误?这个问题错误比较隐蔽,不仔细一点是看不出来的。
可能有的人已经看出来了,我来给大家解释一下吧,错误在于unsigned char 这个数据类型,它占了一个字节(8位),表示的数据范围是0~255(00000000~11111111,八位);当i=255; i++ ;因为 i本身是unsigned char类型,占8位,所以此时i+1变成了100000000 9位,又因为i只能占8位,所以舍掉了最高位,此时的i值又变成00000000了,即就是0;也就是这时i的值变为0了,然后就从i=0开始重新开始循环,最后一直循环下去成了死循环了。
不信大家可以去做一下这个实验,运行一下下面这个程序:
#include <stdio.h>
int main()
{
unsigned char i=0;
printf("/n%d /n",--i);
i=255;
printf("/n%d /n",++i);
}
这个例子就充分说明了越界问题。通俗地讲越界会使变量的值会“从一个极端走向另外一个极端”。
总是一句话:基础很重要,我们得打好基础。
最后
以上就是无私金毛为你收集整理的关于unsiged char 的一个面试题的全部内容,希望文章能够帮你解决关于unsiged char 的一个面试题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复