1. !和 ~ 不一样
! 是逻辑非符号,~ 是位取反符号。对IO口某个引脚赋值时不要错用 !如
2.<<和>>的优先级低于+、-
比如要实现c=x*2+1,没有加括号会出错
3.移位要防止溢出
其实用移位代替乘除法是个不错的方法,笔者很喜欢拿到一段代码后用移位代替乘除法来进行优化。不过有时候却会出现问题,比如溢出问题。当很明显可能溢出的话我们是会注意的,比如
但是有时候这个问题是不明显的,比如当移位出现在数组索引或函数参数时,有段用液晶显示字符的代码如下
这本是一个好方法,但是事实上上面的代码是错的。当执行c<<4时,因为没有明显的赋值过程,我们可能认为没问题,而事实上c的高位已经丢失了,所以得到错误的结果。一个可行的做法是先进行强制转换,如
4.无符号数和有符号数混合运算都会被强制转换为无符号数运算
当一个有符号数和一个无符号数进行算术运算时,系统会自动将有符号数强制转换为无符号数再进行运算(即使你使用有符号数强制类型转换),如下面两种写法的运输结果是一样的
5.局部变量要初始化
局部变量没有初始化的话,因为单片机每次为他分配的是同一个内存区域,当你在函数中是这么使用局部变量时,就可能出问题:
如果第一次调用fun时,a传递的值为0,那么flag = 0x01;执行if(flag&0x01)后面的代码。以后再调用fun时,即使a不为0,但flag依然使用之前的内存区域,所以其值一直为0x01,一直执行的是if后面的代码,而不是else后面的。 如果要避免这个错误,平时要养成对局部变量初始化的习惯。 转自《嵌入式资讯精选》
6
评分
-
查看全部评分
|
|
|
|
有一次面试,面试官让我编写比较两个浮点数的程序,结果我错了。
|
|
|
|
|
嵌入式培训www.arm8.net我是来学习的!非常感谢这个论坛!我来这里拿点资料
|
|
|
|
|
你开心就好。
|
|
|
|
|
我是直接将两个浮点数进行大小比较的,这样是错误的,因为浮点数是有精度的。
|
|
|
|
|
学习一下吧!!!!!!!!嵌入式培训www.arm8.net
|
|
|
|
|