计算机面试问题记录1

c++中如何判断一个浮点数是否为0?

判断是否在一个误差范围内:

cpp
const float eps = 1e-6;
if(abs(x) < eps) {
  // x is nearly zero
}

舍入到整数再判断:
cpp
float x = 0.00001;
if(round(x) == 0) {
  // x is nearly zero
}


c++如何提高多重循环的效率?

一、实例化变量尽量放在for循环体外,只实例化一次。
二、普通变量改为寄存器变量,如i++改为++i。前置递增运算避免了不必要的工作,它把值加1后直接返回改变了运算对象本身。
三、条件比较使用<要快于<=,同理>要快于<=。
四、把外层可以计算的尽可能放到外层;有判断条件的语句与循环不相关的操作语句尽量放在for外面。
五、应将最长的循环放在最内层,循环次数最少的放在最外层,以减少CPU跨切循环层的次数。

 

 

编译原理中优化主要是做什么的?

循环优化:改进循环结构,删除不必要的循环

公共子表达式消除:检测重复的表达式并重用计算结果

内存优化:合并内存访问,优化数据在内存中的布局

编译器自身优化:优化编译器的内部数据结构,加速编译过程

 

 

编译原理中每个步骤主要做什么?

1. 词法分析词法分析阶段将源代码分割成词法单元(标识符、关键字、运算符等),生成词法表。主要作用是进行词法错误检查,并为语法分析生成输入。

2. 语法分析 语法分析阶段根据上下文无关文法构建语法树,检查语法错误,并保存程序语义。这是编译的核心部分。

3. 语义分析语法树的基础上进一步检验语义,如类型检查、作用域resolution等。确保程序语义的正确性。

4. 中间代码生成将源代码转换成中间表示,如三地址码。中间代码去除源语言特定结构,为后端代码优化和生成做准备。

5. 代码优化在中间代码的基础上进行各种优化,如常量传播、循环优化、内联代换等。生成更高效的目标代码,不改变程序语义。

6. 目标代码生成将优化后的中间代码转换成目标机器代码指令,完成代码生成。目标代码可直接在特定平台上运行。

 

 





posted @   Yohoc  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示