如何通过避免 if-else 条件来提高当前代码的效率?
How can I make my current code efficient by avoiding if-else conditions?
- 编程语言:C
- 平台: PIC 微控制器 8 位
- 题数:2
我使用 4 位 7 段显示器来显示数字。我有一些函数在 7 段上显示一些 letter/digit,例如:
zero() // displays 0 on the 7-segment.
one() // displays 1 on the 7-segment.
two() // displays 2 on the 7-segment.
...
现在我有一个数字(比如 1435)要显示在 7 段显示器上。我目前的算法如下:
从数字 1435 中提取单个数字(将数字分隔为 1、4、3、5)。
sds
- 1会显示到7段的第1位
- 4会显示到7段的digit2。
- 3会显示到7段的第3位
- 5会显示到7段的第4位
为了显示这些单独的数字,我使用 'ten' if-else 条件如下:
- 如果要显示的数字== 0 -> 运行函数zero();否则
- 如果要显示的数字== 1 -> 运行函数one();否则
- 如果要显示的数字== 2 -> 运行函数two();
- ...
- ...
- ...
所以这个实现(对于数字 1435)要打印 运行s 几个 if-else 检查。
- 2 检查是否显示数字 1
- 5 检查是否显示数字 4
- 4 检查是否显示数字 3
- 6 检查是否显示数字 5
- 17 total 检查 loop() 函数中的 运行 "periodically and unnecessarily",即使数字未更改 (这是问题编号 1)。
问题编号 2:此实现效率低下,因为当我需要 increment/decrement 那个数字(1435 到 1436 然后到 1437 等等......)时,这个数字if-else 检查的数量也发生了变化,因此数字的变化 不平滑 。这意味着“0”是 if-else 检查中的第一个,因此它会快速显示。另一方面,'9' 是 if-else 检查中的最后一个,因此它在显示之前必须经过十次检查。这使得实现速度变慢,因为要显示的数字从 0 增长到 9。如何实现来解决这两个问题?
提前致谢。
您可以在 table 中使用指向函数的指针:
typedef void (*func)(); // type for functions
func functions[] = { zero, one, two, three, ... }
functions[3](); // example, will call three()
您必须提取所需的数字并将其用作 table 中的索引...
- 编程语言:C
- 平台: PIC 微控制器 8 位
- 题数:2
我使用 4 位 7 段显示器来显示数字。我有一些函数在 7 段上显示一些 letter/digit,例如:
zero() // displays 0 on the 7-segment.
one() // displays 1 on the 7-segment.
two() // displays 2 on the 7-segment.
...
现在我有一个数字(比如 1435)要显示在 7 段显示器上。我目前的算法如下:
从数字 1435 中提取单个数字(将数字分隔为 1、4、3、5)。 sds
- 1会显示到7段的第1位
- 4会显示到7段的digit2。
- 3会显示到7段的第3位
- 5会显示到7段的第4位
为了显示这些单独的数字,我使用 'ten' if-else 条件如下:
- 如果要显示的数字== 0 -> 运行函数zero();否则
- 如果要显示的数字== 1 -> 运行函数one();否则
- 如果要显示的数字== 2 -> 运行函数two();
- ...
- ...
- ...
所以这个实现(对于数字 1435)要打印 运行s 几个 if-else 检查。
- 2 检查是否显示数字 1
- 5 检查是否显示数字 4
- 4 检查是否显示数字 3
- 6 检查是否显示数字 5
- 17 total 检查 loop() 函数中的 运行 "periodically and unnecessarily",即使数字未更改 (这是问题编号 1)。
问题编号 2:此实现效率低下,因为当我需要 increment/decrement 那个数字(1435 到 1436 然后到 1437 等等......)时,这个数字if-else 检查的数量也发生了变化,因此数字的变化 不平滑 。这意味着“0”是 if-else 检查中的第一个,因此它会快速显示。另一方面,'9' 是 if-else 检查中的最后一个,因此它在显示之前必须经过十次检查。这使得实现速度变慢,因为要显示的数字从 0 增长到 9。如何实现来解决这两个问题?
提前致谢。
您可以在 table 中使用指向函数的指针:
typedef void (*func)(); // type for functions
func functions[] = { zero, one, two, three, ... }
functions[3](); // example, will call three()
您必须提取所需的数字并将其用作 table 中的索引...