嵌入式全栈开发学习笔记---C语言笔试复习大全3

目录

笔试题3

笔试题4

笔试题5


上一篇介绍了数据类型的长度和数据范围,并且分别讲解了两个经典的笔试题,这一篇我们再来看三道非常经典的考数据类型长度、数据范围和数据类型转换的笔试题。

说明:我们学过单片机的一般都是有C语言基础的了,网上关于C语言的资料有很多,大家如果对C语言不熟悉的话可以先去详细学一下,再以这篇博文作为复习资料学习。

这篇博文的目的是复习C语言,我们会陆续以30多个编程题作为复习要点,这30多个编程题基本涵盖了C语言所有的内容了,只要你掌握了这30多个编程题,那么你的C语言基本就没什么问题了。

注意:由于本专栏是嵌入式全栈开发专栏,为了我们能熟悉以后实际工作中的开发环境,我们写C语言全部在Linux中的vim编辑器中写,这么做事为了我们能够熟练掌握Linux系统的常用命令以及Linux上的vim编辑器的常用工作命令,以达到对口训练的目的!

vim编辑器的一些工作命令在上一篇博文中已经详细介绍过了,如果不了解可以先去看看。

我们正式开始:

笔试题3

问:

int i = -20;

unsigned int j = 10;

i+j =?

答案:4294967286

为什么呢?

这是一道混合运算,如果你直接填-10,那就是0分不得了。

i是int类型,j是unsigned int类型,在C语言中,不同的数据类型是不能运算的,但是编译的时候没有报错,那是因为当它检测到运算符号两边的数据类型不一样的时候,它会帮我们统一两边的数据类型,即帮我们转换数据类型。

比如,char ch和int num两个变量相加ch+int,我们知道char占1个字节,int占4个字节,如果运算的时候,int转换成char就要丢弃3个字节,那数据就失真了,已经不是原来的数值了,所以int不能转换成char。

这种情况下,char就能够转换成int类型,char补上三个字节

我们得出一个结论:混合运算,把表示范围小的转换成表示范围大的。

那如果说是char和unsigend char,哪一个表示的范围更大呢?

明显是unsigned char的范围更大,因为unsigend char的范围是0~255,而char表示的范围是-128~127。

所以我们再得出一个结论:混合运算,把有符号的转换成无符号的。

因此我们这道笔试题应该这样解:

首先,要知道负数在内存中是以补码的形式出现的。

-20的原码是1000 0000 0000 0000 0000 0000 0001 0100

反码:1111 1111 1111 1111 1111 1111 1110 1011

补码:1111 1111 1111 1111 1111 1111 1110 1100

现在我们要将-20的补码从int型转换成unsigned char型:

补码:1111 1111 1111 1111 1111 1111 1110 1100原来的最高位1是表示符号位,现在既然要转换成无符号的int,那这个最高位的1就不再表示符号了,而是直接带入计算就行了。

我们用计算器算一下这个数多大:

这个数转换成十进制是:4294967276

加上unsigned int 10就是4294967286

那最终这道题的答案就是:4294967286

我们再看一道微软公司的笔试题:

笔试题4

问:

unsigned int a =3;

-1*a=?

答案是:4294967293

-1明显是由符号的数字,a是无符号的数字,所以我们一定是要把-1转换成无符号的数字,然后再进行计算。但是这道题有点刁钻,因为结果已经超出了unsigned int的最大值,最终超出的部分数值要丢弃。

解:

-1的原码是1000 0000 0000 0000 0000 0000 0000 0001

反码:1111 1111 1111 1111 1111 1111 1111 1110

补码:1111 1111 1111 1111 1111 1111 1111 1111

补码转换成无符号的数据,高位的1不再表示符号位,直接计算

12,884,901,885明显超出了unsigned int的最大范围4294967295

所以超出的部分数值要丢弃!

无符号数的原码和补码相等,都是0000 0000 0000 0000 0000 0000 0000 0011,不需要转换!

丢弃了高位的两位10后,得出的结果是4294967293

笔试题5

问:

小数值1.5625的二进制表示是_____(阿里巴巴2015笔试题)

答案是:1.1001

小数部分我们要用到乘2取整法

这些题也希望大家能够牢记,因为这是比较经典的题目,如果你能掌握的话,那今后其他笔试题也能举一反三。

以上就是这篇内容,如想了解更多,欢迎订阅本专栏!

如有问题可评论区或者私信留言,如果想要进交流群请私信!

相关推荐
Abladol-aj20 分钟前
并发和并行的基础知识
java·linux·windows
飞凌嵌入式1 小时前
飞凌嵌入式旗下教育品牌ElfBoard与西安科技大学共建「科教融合基地」
嵌入式硬件·学习·嵌入式·飞凌嵌入式
weixin_452600692 小时前
【青牛科技】电流模式PWM控制器系列--D4870
科技·单片机·嵌入式硬件·音视频·智能电表·白色家电电源·机顶盒电源
JunLan~5 小时前
Rocky Linux 系统安装/部署 Docker
linux·docker·容器
嵌新程5 小时前
day06(单片机高级)PCB设计
单片机·嵌入式硬件·pcb
方竞6 小时前
Linux空口抓包方法
linux·空口抓包
stm 学习ing6 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
海岛日记7 小时前
centos一键卸载docker脚本
linux·docker·centos
AttackingLin7 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python