• 关于数据存储的三道面试题,你会吗?


    关于数据存储的三道面试题,你会吗?

    在这里插入图片描述


    每博一文案

    想要活得自在,快乐就要学会简单做人,淡然处事人活一世,
    草木一秋,不必时时与别人真上游行简单,人就自然没有忧愁,
    何必总让烦恼踩下眉头,却上筋头人参,就像一叶扁舟,
    装得越少才能越自在飘游。
    我们总是爱追逐虚无缥缈的自由,以为所谓的成功就是什么都能拥有,
    却总在追逐的过程中迷失了方向,忘记了真正重要的是精神的富有
    其实幸福与否,从来不靠财富衡量,心里装了太多欲望,总会
    有累的时候。
    浮华转瞬皆成空,千金一德,一个好的心态全难求
    一种米养百种人,自然会有人让你快乐。
    有人让你难受,遇事宽容,别对他人有太多要求,少计较别人的对与错
    多关注自身的得与失,宽容,才能看见生活不一样的美,坦然 
    面对那些是与非不值得关注的,别放在心上。
    神念不满百,昌华千岁忧,已经过去的,何必执着还会到来的
    何必担忧,总是左顾右盼,怎么能往前走,坦然面对一切,
    管它什么烦恼忧愁,我自窥然不动,自在风流。
                                        ————————————     一禅心灵庙语
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17


    话不多说,上菜

    开胃菜

    请问下面的 strlen 的结果输出是多少 ???

    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
    	unsigned char arr[1000];
    	int i = 0;
    	for (i = 0; i < 1000; i++)
    	{
    		arr[i] = -1 - i;
    	}
    	printf("strlen: %d\n", strlen(arr)); 
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    解析:

    • 首先我们需要知道 strlen() 该函数的作用:

      • 作用就是:计算字符串的长度,结束的标志是:(‘\0’) 分隔符,计算到

        该分隔符,就停止了

      • 注意: ‘\0’ == 0 注意它们之间的关系:是相等的 ,’\0’ 其实就是数值 0 ,不过它是用来在字符中表示的 0 ,注意区别

      • 所以这里我们就可以得出一个strlen()结束的条件 就是 当arr[i] = 0 的时候

    • 明白char的范围和的图示表示

      在这里插入图片描述


    运行验证:

    在这里插入图片描述


    中胃菜

    • 下面代码显示的 结果:
    #include<stdio.h>
    
    int main()
    {
    	int i = -20;
    	unsigned int j = 10;
    
    	printf("i+j = %d\n ", i + j);
    	printf("i+j = %u\n", i + j);
    
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    解析:

    • 首先我们明白,数值的 是与我们定义的类型 (int , unsigned,char) 无关的,而是与它本身的类型 (正负) 有关的,数值是以 二进制补码的形式 存放到内存当中去的, 是与我们定义的了类型 (int,unsigned,char) 有关:1. 在内存中取数值补码的范围 —— 是否存在截断 2. 看类型是有无符号 (unsigned ,signed) ,有符号:则补码转反码,再转原码显示; 无符号 : 则补码=反码=原码,直接显示

    • 数值以补码存放在内存中,我们同样使用的是 它们之间的 补码相加 :

    • 原码 补码的方式:原码 ——> 符号位不变,按位取反 反码,——> 反码 +1, 补码

    • 补码 原码的方式:和原码转补码的方式一样:补码——> 符号位不变,按位取反 反码,——>反码 +1 , 原码

    在这里插入图片描述

    • 一般有符号位的和无符号位的计算 ——结果会整形提升至 无符号的

    ]


    运行验证:

    在这里插入图片描述


    结胃菜

    • 下面的代码存在这什么问题 ?
    • 运行的结果是什么呢 ?

    #include<stdio.h>
    #include<windows.h>
    
    int main()
    {
    	unsigned int i = 0;
    	for (i = 0; i >= 0; i--)
    	{
    		printf("%u\n", i);
    		printf("%d\n", i);
    
    		Sleep(1000); // 暂停 1s
    	}
    
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    解析:

    • 首先我们可以发现一点:unsigned int i = 0i 是一个无符号类型的,从上一题 中胃菜 中我们已经知道了,数值的 与我们自定义的类型(int unsigned)是无关的,而数值的 是才与 我们自定义的类型(int unsigned)有关的,
    • 这里是的 i 是无符号的 unsigned 的,以无符号的形式取出 i 并与 0 比较判断,其结果是 永远大于等于 0 的 ,因为:无符号是不存在 负值 的,符号位会被当作是数值加入计算显示
    • 所以无法退出循环 形成:无限循环
      在这里插入图片描述

    运行验证:

    在这里插入图片描述


    举一反三

    • 请看下面代码的结果是 ?
    #include<stdio.h>
    #include<windows.h>
    
    
    int main()
    {
    	unsigned int i = 0;
    	for (i = 9; i >= 0; i--)
    	{
    		printf("%d\n", i);
    		printf("%u\n", i);
    
    		Sleep(1000); // 暂停 1s
    	}
    
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    解析:

    • 同样是 无符号的 出, i 是无符号的 unsigned 的,以无符号的形式取出 i 并与 0 比较判断,其结果是 永远大于等于 0 的 ,因为:无符号是不存在 负值 的,符号位会被当作是数值加入计算显示
    • 不过这里是从 9 开始减的

    在这里插入图片描述

    • 无法退出循环 形成:无限循环

    运行验证:

    在这里插入图片描述

    最后:

    限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵 —— 多多益善,谢谢大家,后会有期,江湖再见!

  • 相关阅读:
    YOLOv7改进:GAMAttention注意力机制
    Dubbo3应用开发—Dubbo3注册中心(zookeeper、nacos、consul)的使用
    python小游戏:飞机射击游戏代码
    关于JSON对象和前端js对象
    cox回归RCS阈值效应函数cut.tab1.3发布
    长文本翻译-免费长文本翻译软件
    你不知道的自然语言处理应用场景和挑战
    微信小程序入门---超详细教程
    【Android面试八股文】在onResume中是否可以测量宽高?
    Redis性能滑坡:哈希表碰撞的不速之客【redis第二部分】
  • 原文地址:https://blog.csdn.net/weixin_61635597/article/details/125511091