sunhaojie 发表于 2012-10-14 15:48:49

公式UBRDIV0=( (int)(pclk/16./baud+0.5) -1 );中的运算符“./”是啥...

这是ARM9里面设置串口计算波特率的公式,为什么16和baud之间的除号多了一个“.”:UBRDIV0=( (int)(pclk/16./baud+0.5) -1 );

pangfen 发表于 2012-10-14 16:24:14

.是跟16的吧,表示是浮点数16.0

bennyhuang 发表于 2012-10-14 16:25:24

本帖最后由 bennyhuang 于 2012-10-14 16:35 编辑

其实是16.0/baud的意思

C语言中数学运算的结果的数据类型和操作数中精度较高的数据类型一致。例如int+char=int,int/int=int,float*int=float.

式中pclk、baud应该是一个整形的变量(例如 char int之类的),假如写成16/baud的话,两个整形变量做运算结果还是整形变量,小数部分被舍去了。
写成16./baud的话就变成浮点型和整形做运算,结果是浮点型,小数部分被保留。

那个语句其实是用来做四舍五入的,float强制转换成int型变量的时候只是机械的去除小数部分,保留整数部分,不考虑四舍五入,例如10.9强制转换的结果是10而不是11.
+0.5以后,原变量小数部分>=0.5的时候进位,达到四舍五入的效果。

sunhaojie 发表于 2012-10-14 18:30:34

原来如此,谢谢楼上
页: [1]
查看完整版本: 公式UBRDIV0=( (int)(pclk/16./baud+0.5) -1 );中的运算符“./”是啥...