![]() |
1
2
有一种使用减法的方法,但我不认为它比在“普通”CPU上使用减法和模快(在嵌入式环境中可能不同)。
|
![]() |
2
15
显而易见的解决办法是 不 另一方面,与将数据传输到SD卡所用的时间相比,/和%的执行时间可能微不足道;因此,请确保您优化了正确的设置。 |
![]() |
3
4
当然还有一种更快的方法:使用1024个预先计算的字符串数组。然后,只需执行边界检查,然后在数组中创建索引。
|
![]() |
4
3
尽管如此,这里有一篇文章可能对你有用。它使用循环、移位、加法和分支,具有线性/恒定复杂性: http://www.johnloomis.org/ece314/notes/devices/binary_to_BCD/bin_to_bcd.html 另外,我认为编写一些不执行任何除法、乘法或分支,但仍然给出正确答案的代码会很有趣[0-1024]。没有人保证这比其他选择更快。这类代码只是探索的一种选择。 我很想看看是否有人能提供一些技巧,使代码更小,需要更少的内存,或需要更少的操作,同时保持其余的计数相等,或缩小它们:)
性能: 使用Jonathan Leffler答案中的性能比较和itoa例程,以下是我得到的数据:
我将迭代计数增加到200000,以确保在时间分辨率方面没有任何问题,并且必须添加
代码:
|
![]() |
5
2
multiply by the reciprocal 而不是除以基数。Terje的代码是针对x86的,但是将总体思想移植到PIC中应该不会非常困难。 |
![]() |
6
2
如果值正确地在范围(0..1023)内,那么上一次的转换将不必要地浪费分区;最后一行可以替换为:
甚至:
性能测试-Intel x86_64核2 Duo 3.06 GHz(MacOS X 10.6.4)
使用GCC4.5.1编译,32位工作,平均计时为(优化)
在64位编译和工作时,平均计时为:
显然,在这台机器上,使用减法并不是一个成功的提议。你必须在你的机器上测量才能做出决定。去掉模10000运算只会使结果偏向于除法(当用比较代替除法时,它减少了大约0.02秒的时间;这节省了15%,值得拥有)。 |
![]() |
7
1
你有什么理由特别关心这个吗?
如果编译器和C库提供
|
![]() |
8
1
我已经用一个更好的答案代替了以前的答案。此代码按正确顺序创建一个4个字符的字符串,从输出[0]中的最高有效位到输出[3]中的最低有效位,并在输出[4]中使用零终止符。我对你的PIC控制器或C编译器一无所知,但这段代码只需要16位整数、加法/减法和移位。
|
![]() |
9
1
是否需要使用 |
![]() |
mattdub · 如何在ASCII和字典中找到最大素数? 1 年前 |
|
isaiahstanke · 每次运行脚本时更新Python变量 1 年前 |
|
Anak1n · 打印ASCII彩色字符串时的间距问题 2 年前 |
![]() |
polarshark123 · 通过导入使用ascii字符 2 年前 |
![]() |
j johns · 通过VBA将ascii art添加到命令提示符 3 年前 |
|
Kstulen · 在Golang中打印ASCII字符 7 年前 |
![]() |
Thomas Linssen · 调整二维数组? 7 年前 |
![]() |
Defcon · 从unix到大型机的LFTP ASCII错误 7 年前 |