小编imd*_*imd的帖子

更改 Chart.js 中对数刻度的底数

现有的对数轴默认以 10 为底。有没有办法将刻度更改为不同底数的对数?

chart.js

7
推荐指数
1
解决办法
912
查看次数

如何检查数组中的非零值(元素)

我想知道如何编写一个函数来返回是否至少有三个值不等于 0。我搜索过类似的问题,但找不到任何有效的解决方案。为了解释我的问题,这里有一个例子:

我有一个包含这些元素的数组: [1,0,2,0,4,0,0,3,0,0]。我想检查是否至少有 3 个元素不等于 0。

1如果至少有 3 个元素,我的代码将返回!= 00如果元素少于 3 个,我的代码将返回!=0

所以在我的例子中它应该返回1.

c arrays

4
推荐指数
1
解决办法
2万
查看次数

编译器涉嫌优化while循环

在嵌入式编程讲座的这一部分中,Samek博士解释了编译器如何能够实现"原始代码"的效率(可能是由于这意味着由语法的逻辑顺序决定的实现):

我希望你注意到反汇编代码实现了与我为while循环描述的不同的控制流.原始代码应该首先测试条件,然后如果条件不正确则跳过循环体.编译后的代码以无条件分支开始,并反转循环体的顺序和条件的测试.但是,当你考虑它时,那两个控制流是等价的,除了生成的控制流更快,因为它在循环的底部只有一个条件分支.

在他的解释中,他参考了所示的两个流程图.描述编译代码的图表说明了"它在循环底部只有一个条件分支".我似乎无法看到它在实践中是如何工作的:

  • 是我拍摄的屏幕截图,展示了如何实现原始代码.(初始)机器指令的顺序:

0x2815 CMP- > 0x1c40 ADDS- >repeat until condition is false

  • 是另一个屏幕截图,显示了编译器使用的序列.(初始)机器指令的顺序:

0x2815 CMP- > 0xdbfc BLT.N- > 0x1c40 ADDS- >repeat until condition is false

我可以理解两种控制流是如何相等的(至少从图中看是如此),但肯定不是生成的(右边)如何更快.首先,两个图表最开始的箭头导致了相同的分支.其次,尽管分支确实似乎在右侧的原理图中发生,正如您从屏幕截图中看到的那样,模拟器似乎表明两种方法都是从与比较(0x2815 CMP)相关的机器指令开始的.

我如何协调流程图与我在实践中看到的内容?

c performance assembly while-loop

1
推荐指数
2
解决办法
225
查看次数

标签 统计

c ×2

arrays ×1

assembly ×1

chart.js ×1

performance ×1

while-loop ×1