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

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

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

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

  • 31
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vera工程师养成记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值