// 将整型转换为定点数,通过将整数左移16位来实现
#define cfixed_from_int(i) (((cfixed)(i)) << 16)
// 将浮点数转换为定点数,乘以65536.0后转换为cfixed类型
#define cfixed_from_float(x) ((cfixed)((x) * 65536.0f))
// 将双精度浮点数转换为定点数,乘以65536.0后转换为cfixed类型
#define cfixed_from_double(d) ((cfixed)((d) * 65536.0))
// 将定点数转换为整型,通过右移16位实现
#define cfixed_to_int(f) ((f) >> 16)
// 将定点数转换为浮点数,除以65536.0f后转换为float类型
#define cfixed_to_float(x) ((float)((x) / 65536.0f))
// 将定点数转换为双精度浮点数,除以65536.0后转换为double类型
#define cfixed_to_double(f) ((double)((f) / 65536.0))
// 定义定点数的1,将整数1左移16位
#define cfixed_const_1 (cfixed_from_int(1))
// 定义定点数的0.5,将cfixed_const_1右移1位
#define cfixed_const_half (cfixed_const_1 >> 1)
// 定义定点数的e (自然对数的底数),这里有误,应该使用cfixed_from_float(math_e),这里简化成了1
#define cfixed_const_e ((cfixed)(1))
// 定义定点数的(1 - e),计算1减去自然对数的底数e
#define cfixed_const_1_m_e (cfixed_const_1 - cfixed_const_e)
// 获取定点数的小数部分,与(1 - e)进行按位与操作
#define cfixed_frac(f) ((f) & cfixed_const_1_m_e)
// 获取定点数的整数部分,通过将小数部分清零实现
#define cfixed_floor(f) ((f) & (~cfixed_const_1_m_e))
// 获取定点数的向上取整结果,对f加上0xffff后取整数部分
#define cfixed_ceil(f) (cfixed_floor((f) + 0xffff))
// 定点数乘法运算,将x转为64位整数与y相乘后再右移16位得到结果
#define cfixed_mul(x, y) ((cfixed)((((int64_t)(x)) * (y)) >> 16))
// 定点数除法运算,将x转为64位整数左移16位后除以y得到结果
#define cfixed_div(x, y) ((cfixed)((((int64_t)(x)) << 16) / (y)))
// 定义定点数能表示的最大整数值
#define cfixed_const_max ((int64_t)0x7fffffff)
// 定义定点数能表示的最小整数值
#define cfixed_const_min (-((((int64_t)1) << 31)))
// 定义cfixed类型为32位有符号整数
typedef int32_t cfixed;
06-08
7142
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)