取整和取余数大家有什么好的方法?

2020-01-01 17:44发布

本帖最后由 xurenhui 于 2017-1-4 16:21 编辑

1.芯片是STM8S003K3
2.编译软件是IAR 6.3.16版本
3.如:Timer_Suffer[1] = Get_value/1000;//取整数 ---------------该方法大概占用12个字节,采用高级优化
         Timer_Suffer[2] = Get_value%100%10;//------------------该方法占用16个字节,采用高级优化
4.有什么简单点算法,使占用flash小一点,运算速度慢一点都没有关系,感觉自己种方法太笨拙了。
5.现在发现空间不够,所以希望大家给点建议,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
37条回答
xurenhui
1楼-- · 2020-01-04 11:15
xurenhui 发表于 2017-1-5 08:17
Timer_Suffer[3] = Get_value%100/10;
你好,像我这个取十位数的值对吗,有简单点不? ...


试下这样会不会省几个字节?

temp = Get_value;
Timer_Suffer[1] = temp%10;
temp/=10;
Timer_Suffer[2] = temp%10;
temp/=10;
Timer_Suffer[3] = temp%10;
XA144F
2楼-- · 2020-01-04 16:41
XA144F 发表于 2017-1-5 09:46
单片机是把除法变成了多次的减法,被除数多次减去除数,直到不够为止,减去的次数就是商,不够的部分是余数 ...

分析很正点,谢谢
laujc
3楼-- · 2020-01-04 18:14
XA144F 发表于 2017-1-5 09:46
单片机是把除法变成了多次的减法,被除数多次减去除数,直到不够为止,减去的次数就是商,不够的部分是余数 ...

对于有硬件除法器的单片机来说,不是这样的。
xurenhui
4楼-- · 2020-01-04 22:41
laujc 发表于 2017-1-5 10:48
试下这样会不会省几个字节?

temp = Get_value;

你好
temp = Get_value;
Timer_Suffer[1] = temp%10;
temp/=10;
Timer_Suffer[2] = temp%10;
temp/=10;
Timer_Suffer[3] = temp%10;

上面这样算法Timer_Suffer[3] 与Timer_Suffer[2] 的值是一样的吧
laujc
5楼-- · 2020-01-04 23:53
 精彩回答 2  元偷偷看……
xurenhui
6楼-- · 2020-01-05 03:48
xurenhui 发表于 2017-1-5 10:52
你好
temp = Get_value;
Timer_Suffer[1] = temp%10;

你实际验证一下代码是否减小,我没有去验证。

不一样,中间执行了一次 temp/=10;

一周热门 更多>