我是靠谱客的博主 无私金毛,最近开发中收集的这篇文章主要介绍关于unsiged char 的一个面试题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

      刚才在孙晓亮的博客上看到一道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 的一个面试题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部