嵌入式全栈开发学习笔记---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取整法

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

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

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

相关推荐
惜.己1 分钟前
Linux常用命令(十四)
linux·运维·服务器
仰泳之鹅14 分钟前
【51单片机中断】
单片机·嵌入式硬件·51单片机
happygrilclh1 小时前
STM32 定时器主从模式配置解析
stm32·单片机·嵌入式硬件
linkingvision1 小时前
H5S 视频监控AWS S3 对象存储
linux·运维·aws·视频监控s3对象存储
belldeep2 小时前
WSL 安装 Debian 12 后,Linux 如何安装 vim ?
linux·debian·vim
王光环2 小时前
STM32H743IIT6_ADC采集误差分析与ADC_DMA
stm32·单片机
wqqqianqian2 小时前
国产linux系统(银河麒麟,统信uos)使用 PageOffice自定义Word模版中的数据区域
linux·word·自定义·pageoffice·数据区域
南棱笑笑生2 小时前
20250512给NanoPi NEO core开发板在Ubuntu core20.04系统更新boot.img
linux·运维·ubuntu
XMYX-02 小时前
Linux du 命令终极指南:从基础到精通
linux·服务器
芯眼3 小时前
STM32启动文件详解(重点)
java·开发语言·c++·stm32·单片机·mybatis