使用按位或比较运算符对五个整数进行排序可以通过以下方式实现:首先获取最大的数字,然后获取第二大的数字,然后获取第三大的数字,依此类推。
这是我获取最高数字的代码:
#include <stdio.h>
int main() {
int a, b, c, d, e;
int aa, bb, cc, dd, ee;
a = 4; b = 2; c = 5; d = 1; e = 3;
aa = (a > b) ?
((a > c) ? ((a > d) ? ((a > e) ? a : e) : ((d > e) ? d : e)) :
((c > d) ? ((c > e) ? c : e) : ((d > e) ? d : e))) :
((b > c) ? ((b > d) ? ((b > e) ? b : e) : ((d > e) ? d : e)) :
((c > d) ? ((c > e) ? c : e) : ((d > e) ? d : e)));
printf("highest: %d\n", aa);
return 0;
}
我认为使用这种方法可以获得第二、第三、第四和第五最高的数字。
还有其他方法可以使用比较/按位运算符获取五个整数的中位数吗?任何其他组合方法可能是有效的。
顺便说一句,我将在硬件中实现这个算法。
使用组合方法进行排序比使用状态机更快。
一种思考方法是将 5 个数字之间的 10 次比较运算视为二进制输入。然后你有选择:
- 绘制 10 输入卡诺图并尽可能简化逻辑。
- 构建一个 10 位数字作为表的索引。
有些可能性永远不会发生,所以我确信可以进行一些简化。例如,如果 (a>b) 且 (b>c),则 (a>c) 将始终为真。这将有助于方法#1 并在方法#2 中生成错误情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)