// 2006.5.12
// 3 取 2 表决(多数表决制),既对输入的三个字节进行判断
// 000 /1 取 0 (0个数多), 110 /1 取 1 (1个数多)#define BYTE char
BYTE Major3_Judge(BYTE v1, BYTE v2 ,BYTE v3)
{
BYTE vx=0x00 ;
BYTE bits= v1&~v2&~v3 | ~v1&v2&v3 ;
vx = v1&~bits | v2&bits;
return vx;
}
#undef BYTE
V2 V3
V1 |
00 |
01 |
11 |
10 | |
0 |
0 |
0 |
1 |
0 | |
1 |
1 |
0 |
0 |
0 |
`显然 上面取 1 的 bits 位为 011和100 ,即bits= v1&~v2&~v3 | ~v1&v2&v3 ;
这样bits=1的位置就是 v1和v2与 v1和 v3均不同的数位,可以取V2的数位,因为此时V2和V3的数位必然相同,然后bits=0的位置就是 v1和v2或 v1和 v3有相同的数位,可以取V1的数位,因为此时V1和V3的数位或者V1和V2的数位必然至一个少相同
应用离散数学的 思想避免了 循环对每一位单独进行判定,大大优化拉程序,这只是一个简单的示例,只是提醒可以综合使用所学的知识
评论