当前位置: 首页 > wzjs >正文

白石龙做网站校园网站建设与管理

白石龙做网站,校园网站建设与管理,wordpress k2,东莞工业设计公司引言 在嵌入式系统开发的面试中,常常会考察候选人对 C 语言基础知识的掌握程度。以下将详细分析几道常见的嵌入式面试题,包括解题步骤、涉及的知识点以及相关拓展。 题目 1 main() {unsigned char z0;unsigned char x100;unsigned char y10;z (~x)*(…

引言

在嵌入式系统开发的面试中,常常会考察候选人对 C 语言基础知识的掌握程度。以下将详细分析几道常见的嵌入式面试题,包括解题步骤、涉及的知识点以及相关拓展。

题目 1

main() {unsigned char z=0;unsigned char x=100;unsigned char y=10;z = (~x)*(x|y);printf(" %d\n", z);
}

解题步骤

  1. 计算 ~x
    • x = 100,其 8 位二进制表示为 01100100
    • 按位取反运算符 ~ 对 x 的每一位进行取反操作,得到 10011011。在 unsigned char 类型下,这个二进制数对应的十进制值为 155
  2. 计算 x | y
    • x 的二进制是 01100100y = 10,二进制为 00001010
    • 按位或运算符 | 会对两个操作数的对应位进行逻辑或运算,即只要对应位中有一个为 1,结果位就为 1。所以 x | y 的结果是 01101110,对应的十进制值是 110
  3. 计算 155 * 110 并处理溢出
    • 先计算 155 * 110 = 17050
    • 由于 z 是 unsigned char 类型,它只能表示 8 位数据,取值范围是 0 到 255。当计算结果超出这个范围时,就会发生溢出。处理方法是对结果进行取模运算,即 17050 % 256 = 154。所以最终 z 的值为 154

涉及知识点

按位运算

按位运算是对二进制位进行操作的运算,常见的按位运算符有:

  • 按位取反 ~:对操作数的每一位取反,0 变为 11 变为 0。例如,~01100100 得到 10011011
  • 按位或 |:对两个操作数的对应位进行逻辑或运算,只要有一个位为 1,结果位就为 1。如 01100100 | 00001010 得到 01101110
  • 按位与 &:对两个操作数的对应位进行逻辑与运算,只有当两个位都为 1 时,结果位才为 1。例如,01100100 & 00001010 得到 00000000
  • 按位异或 ^:对两个操作数的对应位进行异或运算,相同为 0,不同为 1。如 01100100 ^ 00001010 得到 01101110
数据类型转换

在 C 语言中,不同数据类型之间可能会发生转换。分为隐式转换和显式转换:

  • 隐式转换:在表达式中,不同类型的数据进行运算时,编译器会自动将它们转换为相同的类型。例如,在 (~x)*(x|y) 中,~x 和 x|y 的结果都是 unsigned char 类型,它们相乘时可能会先隐式转换为 int 类型进行计算。
  • 显式转换:也称为强制类型转换,通过 (类型名)表达式 的形式进行。例如,(int)3.14 会将 3.14 强制转换为 int 类型,结果为 3
无符号字符型溢出

unsigned char 类型是无符号的 8 位整数,其取值范围是 0 到 255。当计算结果超出这个范围时,就会发生溢出。溢出的处理方式是对结果进行取模运算,模为 256。例如,256 溢出后变为 0257 溢出后变为 1 等。

拓展

按位运算在嵌入式系统中非常有用,常用于寄存器操作、位掩码等。例如,通过按位与和按位或操作可以设置或清除寄存器的某一位。数据类型转换在处理不同精度的数据时也很常见,但要注意隐式转换可能会导致数据丢失。无符号类型溢出在一些需要循环计数的场景中可以利用,例如使用 unsigned char 作为计数器,当计数到 255 后会自动回到 0

题目 2

int sum(int a) {int c=0;static int b=3;c+=1;b+=2;return(a+b+c);
}
void main() {int i;int a=2;for(i=0;i<5;i++) {printf("%d,", sum(a));}
}

解题步骤

  1. 分析 c 和 b 的特性
    • c 是局部变量,每次调用 sum 函数时,c 都会被重新初始化为 0,然后执行 c += 1,所以 c 的值始终为 1
    • b 是静态变量,在函数第一次调用时被初始化为 3。静态变量的特点是在程序的整个生命周期内只初始化一次,并且会保留上一次调用结束时的值。每次调用 sum 函数时,b 都会执行 b += 2
  2. 五次调用 sum(a)
    • 第一次调用:b = 3 + 2 = 5c = 1a = 2,所以 return 2 + 5 + 1 = 8
    • 第二次调用:b = 5 + 2 = 7c = 1a = 2return 2 + 7 + 1 = 10
    • 第三次调用:b = 7 + 2 = 9c = 1a = 2return 2 + 9 + 1 = 12
    • 第四次调用:b = 9 + 2 = 11c = 1a = 2return 2 + 11 + 1 = 14
    • 第五次调用:b = 11 + 2 = 13c = 1a = 2return 2 + 13 + 1 = 16

涉及知识点

局部变量

局部变量是在函数内部定义的变量,其作用域仅限于定义它的函数内部。每次调用函数时,局部变量都会被重新创建和初始化。例如,c 就是一个局部变量,每次调用 sum 函数时,c 都会被初始化为 0

静态变量

静态变量使用 static 关键字修饰,在函数内部定义的静态变量在程序的整个生命周期内只初始化一次,并且会保留上一次调用结束时的值。静态变量的存储位置在静态存储区,而不是栈上。例如,b 就是一个静态变量,第一次调用 sum 函数时初始化为 3,后续调用会保留上一次的值并继续进行操作。

拓展

静态变量在需要保留函数调用状态的场景中非常有用,例如实现计数器、缓存等。但要注意,过多使用静态变量可能会导致程序的可维护性和可测试性下降,因为静态变量的状态在整个程序生命周期内都存在,可能会影响其他函数的执行结果。

题目 3

char str[] = "Hello";
char *p = str;
int n = 10;
printf("%d, %d, %d,", sizeof(str), sizeof(p), sizeof(n));

解题步骤

  1. 计算 sizeof(str)
    • str 是一个字符数组,用来存储字符串 "Hello"。在 C 语言中,字符串是以 '\0' 结尾的字符序列,所以 "Hello" 实际上包含 5 个字母和 1 个结束符 '\0',总共 6 个字符。sizeof 运算符返回的是数组占用的内存字节数,所以 sizeof(str) 的结果是 6
  2. 计算 sizeof(p)
    • p 是一个字符指针,它指向 str 数组的首地址。在 32 位系统中,指针的大小通常是 4 字节;在 64 位系统中,指针的大小通常是 8 字节。这里假设是 32 位系统,所以 sizeof(p) 的结果是 4
  3. 计算 sizeof(n)
    • n 是一个 int 类型的变量,在大多数系统中,int 类型通常占用 4 字节,所以 sizeof(n) 的结果是 4

涉及知识点

sizeof 运算符

sizeof 是一个 C 语言的运算符,用于计算数据类型或变量所占用的内存字节数。它的使用方式有两种:sizeof(类型名) 或 sizeof(表达式)。例如,sizeof(int) 返回 int 类型占用的字节数,sizeof(str) 返回数组 str 占用的字节数。

数组和指针
  • 数组:数组是一组相同类型的数据的集合,在内存中是连续存储的。数组名可以看作是指向数组首元素的常量指针,但它和指针还是有区别的。例如,sizeof 对数组操作时返回的是整个数组占用的内存大小,而不是指针的大小。
  • 指针:指针是一个变量,它存储的是内存地址。指针的大小取决于系统的位数,32 位系统中指针通常为 4 字节,64 位系统中指针通常为 8 字节。

拓展

sizeof 运算符在动态内存分配、数组操作等方面非常有用。例如,在使用 malloc 函数分配内存时,可以使用 sizeof 来确定需要分配的内存大小。在处理不同大小的数据类型时,要注意 sizeof 的返回值可能会因系统而异。同时,要区分数组和指针的不同,避免在使用时出现混淆。

总结

通过对这几道嵌入式面试题的分析,我们可以看到嵌入式开发中对 C 语言基础知识的要求较高。掌握按位运算、数据类型转换、变量存储类型、sizeof 运算符等知识点,对于解决实际问题和应对面试都非常重要。希望大家通过学习这些内容,能够在嵌入式开发的道路上取得更好的成绩。


文章转载自:

http://r27vv30v.frfpx.cn
http://VVbDkul1.frfpx.cn
http://HWq6NxDA.frfpx.cn
http://YDU3mPL7.frfpx.cn
http://FUfmUNni.frfpx.cn
http://3F2PgUB1.frfpx.cn
http://pg61RDfK.frfpx.cn
http://bjR2rMcv.frfpx.cn
http://YVysmx40.frfpx.cn
http://B6pbjK1c.frfpx.cn
http://PKw949Gn.frfpx.cn
http://H9jm0E0O.frfpx.cn
http://F7eiDhhC.frfpx.cn
http://IGglV8CK.frfpx.cn
http://Mo4ZNeZk.frfpx.cn
http://PUTHunTG.frfpx.cn
http://mZ6M7rHn.frfpx.cn
http://L1S8WRni.frfpx.cn
http://ynM1vKpi.frfpx.cn
http://blSKqtxU.frfpx.cn
http://Yr9iAA0B.frfpx.cn
http://1vbpmWvE.frfpx.cn
http://ToZwgXsa.frfpx.cn
http://TESbwqJC.frfpx.cn
http://ZvXLaSRe.frfpx.cn
http://YIENM3Mm.frfpx.cn
http://hRgMsRgA.frfpx.cn
http://y9swZgef.frfpx.cn
http://enxGS3AH.frfpx.cn
http://styp1t2B.frfpx.cn
http://www.dtcms.com/wzjs/610914.html

相关文章:

  • 网站建设后台是怎么制作的网站基站的建设方案
  • 学校的网站如何建设版面设计素材网站
  • 卓越建站快车贵阳企业网站建设制作
  • php mysql开发的网站开发wordpress侧边栏 代码
  • 永久免费手机建站平台青海公路建设市场信用信息服务网站
  • 静态网站如何做自适应移动端杭州市规划建设网站
  • html游子吟网页制作代码合川网站优化
  • 如何学会建网站先网站开发后软件开发
  • 福州网站建设优质服务商品牌网站建设四川
  • 什么网站做品牌特卖新公司怎么做网络推广
  • 商标注册网上查询重庆网站seo分析
  • 网站建设总结体会小程序定制语言
  • 建站工具 phpwind附近培训电脑的地方
  • 网站颜色搭配表东营市城乡建设局网站
  • 怎么查网站icp备案郑州企业网站优化排名
  • 网站模板 asp pc wap做直播导航网站
  • 知名企业网站分析 比较评估辽宁建筑网
  • 起名算命网站如何做赚钱frontpage2003网页制作视频教程
  • 做网站的绿色背景图做网站策划需要什么技能
  • 网站建设一站式jsp做的网站运行都需要什么
  • 文山微网站建设织梦dedecms医院类网站在线预约挂号插件_utf8
  • 天津网站建设设计费用网站建设w亿玛酷1负责
  • 益田附近网站建设网站做菠菜
  • 做网站要掌握几种语言ui设计接单价目表
  • 做网站电脑开一天用多少钱小精灵网站在线做语文
  • 口碑好的坪山网站建设semester
  • 网站做框架杭州的网站设计公司
  • 网站忘记备案加强网站人才建设
  • asp.net企业网站医院网站改版建设方案
  • 有谁做网站合肥宣传片制作公司六维时空