关于C语言基础知识点介绍

变量与值得比较 1、布尔变量与零值的比较     不可将布尔变量直接与 true、 false或者 1、 0进行比较 。据布尔类型的语义,零值为“ 假”(记为 false),任何非零值都是“ 真”(记为true)。    true的值究竟是什么并没有统一的标准。例如 visual c++ 将 true定义为 1,而 visual basic则将 true定义为-1 。    假设布尔变量名字为 flag,它与零值比较的标准 if语句如下:    其它的用法都属于不良风格,例如: 2、整形变量与零值的比较     应当将整型变量用“ ==” 或“ !=” 直接与 0比较 。假设整型变量的名字为 value,它与零值比较的标准 if语句如下:    不可模仿布尔变量的风格而写成:3、浮点变量与零值的比较    不可将浮点变量用“ ==” 或“ !=” 与任何数字比较 。千万要留意, 无论是 float还是 double类型的变量, 都有精度限制。    所以一定要避免将浮点变量用“ ==” 或“ !=” 与数字比较,应该设法转化成“ >=” 或“ c可以改写为a>(c*b)。    如果确定操作数是无符号unsigned的,使用无符号unsigned除法更好一些,因为它比有符号signed除法效率高。 3、取模的一种替代方法     我们使用取余数操作符来提供算数取模。但有时可以结合使用if语句进行取模操作。考虑如下两个例子:    优先使用if语句,而不是取余数运算符,因为if语句的执行速度更快。这里注意新版本函数只有在我们知道输入的count结余0至59时在能正确的工作。 4、使用数组下标     如果你想给一个变量设置一个代表某种意思的字符值,你可能会这样做:    或者这样做:    一种更简洁、更快的方法是使用数组下标获取字符数组的值。如下:5、使用别名    考虑如下的例子:    尽管*data的值可能从未被改变,但编译器并不知道anyfunc函数不会修改它,所以程序必须在每次使用它的时候从内存中读取它。如果我们知道变量的值不会被改变,那么就应该使用如下的编码:    这为编译器优化代码提供了条件。 6、局部变量的类型     我们应该尽可能的不使用char和short类型的局部变量。对于char和short类型,编译器需要在每次赋值的时候将局部变量减少到8或者16位。    这对于有符号变量称之为有符号扩展,对于无符号变量称之为零扩展。这些扩展可以通过寄存器左移24或者16位,然后根据有无符号标志右移相同的位数实现,这会消耗两次计算机指令操作(无符号char类型的零扩展仅需要消耗一次计算机指令)。    可以通过使用int和unsigned int类型的局部变量来避免这样的移位操作。这对于先加载数据到局部变量,然后处理局部变量数据值这样的操作非常重要。无论输入输出数据是8位或者16位,将它们考虑为32位是值得的。    考虑下面的三个函数:    尽管结果均相同,但是第一个程序片段运行速度高于后两者。 循环语句 1、多重循环     在多重循环中, 如果有可能, 应当将最长的循环放在最内层, 最短的循环放在最外层,以减少 cpu 跨切循环层的次数。例如示例 4-4(b)的效率比示例4-4(a)的高 : 2、循环体内的判断     如果循环体内存在逻辑判断, 并且循环次数很大, 宜将逻辑判断移到循环体的外面。    示例 4-4(c)的程序比示例 4-4(d)多执行了 n-1次逻辑判断。并且由于前者老要进行逻辑判断,打断了循环“ 流水线” 作业,使得编译器不能对循环进行优化处理, 降低了效率。    如果n非常大, 最好采用示例 4-4(d)的写法, 可以提高效率。如果 n非常小,两者效率差别并不明显,采用示例 4-4(c)的写法比较好, 因为程序更加简洁。 3、for 语句的循环控制变量     不可在 for 循环体内修改循环变量,防止 for 循环失去控制 。建议 for语句的循环控制变量的取值采用“ 半开半闭区间” 写法。    示例 4-5(a)中的 x值属于半开半闭区间“ 0 =< x < n”,起点到终点的间隔为 n,循环次数为 n。    示例 4-5(b)中的 x值属于闭区间“ 0 =< x 10 && b=4)这样的语句中,确保and表达式的第一部分最可能较快的给出结果(或者最早、最快计算),这样第二部分便有可能不需要执行。    对于涉及if…else…else…这样的多条件判断,例如:    使用switch可能更快:    在if()语句中,如果最后一条语句命中,之前的条件都需要被测试执行一次。switch允许我们不做额外的测试。如果必须使用if…else…语句,将最可能执行的放在最前面。


晶圆代工已经打上门了!看中芯国际是如何应对的
蓝牙耳机买什么好一些,最好的无线蓝牙耳机品牌排行
浅谈工业应用的运动控制策略
格兰仕刷新了业界认识,推行新物种、新基地、新平台
红外测温仪通过测量物体发出的红外辐射并将其转换为温度信息,明火煤监控系统的明火煤检测装置
关于C语言基础知识点介绍
基于PWM控制与超级电容器控制的电压暂降抑制装置设计
OpenHarmony当前进展和未来趋势
SK电讯完成第二代英特尔芯片测试,改善流量的延迟和抖动性能
荷兰输电系统运营商TSO获得2.5亿欧元贷款
基于NJl006AK和TSM320C6416芯片实现GPS接收机信号采集系统的设计
全球智能手机市场连续八季度下滑Q2三星份额第一
作为开源系统得鸿蒙或将给安卓带来不小的冲击
虫情测报仪的功能特点及技术参数
压敏电阻爆裂的原因分析
号称“最实惠的家用轿车”的神车卡罗拉配置有点牛逼!
关于智能驾驶引爆的无限可能的分析和介绍
机器人:人工智能的新应用
J6051系留多旋翼无人机技术的应急通信方案
下一代Mac将采用更先进全新电源管理技术