技术论坛

 多字节奇偶性判断方法(针对字节中1的个数)

返回主题列表
作者 主题
yanxiao
版主

经验值:26142
发帖数:11973
精华帖:43
楼主    2022-06-16 20:54:05
主题:多字节奇偶性判断方法(针对字节中1的个数) 精华帖  精编帖 

多字节的奇偶性,是指多个字节中,BIT位为1的个数的奇偶性。

字节的奇偶性,在Smart中没有直接可用的状态位,无法直接作出判断。

当然,最原始的方法,就是按位一个一个地数,这个效率显然不可接受。

先看XOR异域运算的一个特征,A、B、C均为位变量:

假如:C=A XOR B

那么,A、B两个位组合的奇偶性,与C的奇偶性相同。

因此,可以使用XOR运算,把N个字节的奇偶性,浓缩到 1个字节中。

再对1个字节的8个BIT,一个一个地数1的个数,相对来说,效率提高不少。

yanxiao
版主

经验值:26142
发帖数:11973
精华帖:43
2楼    2022-06-16 23:54:30
精编帖  主题:回复:多字节奇偶性判断方法(针对字节中1的个数)

异或运算,用来多字节的奇偶性浓缩到单字节中。

winter938
至圣

经验值:10682
发帖数:1561
精华帖:33
5楼    2022-06-17 22:09:19
精编帖  主题:回复:多字节奇偶性判断方法(针对字节中1的个数)

若干个位的异或⊕运算结果在任意交换位的次序后运算结果仍然保持不变。

A⊕B=B⊕A=!A*B+!B*A

A⊕B⊕C=A⊕C⊕B=C⊕A⊕B=B⊕A⊕C=B⊕C⊕A=C⊕B⊕A

因此多字节的所有位奇偶性的判断可以逐个字节进行异或运算,然后对结果字节的8个位再进行异或运算,得到最终结果

工控爱好者
yanxiao
版主

经验值:26142
发帖数:11973
精华帖:43
12楼    2022-07-05 23:20:00
精华帖  主题:回复:多字节奇偶性判断方法(针对字节中1的个数)

最初想法来自另一热贴:80工位开关控制同一个灯。

不讲那个贴子的真正用途。

重新假设一个控制要求:有80个工位,每个工位上有一个双位开关,扳动此开关,可以控制共同的一个灯的亮灭,任一开关变位(扳动变换状态),导致灯的状态翻转。

一个一个开关进行判断,当然是可以的,但效率显然是最低的。

把80个开关状态整理进10个字节中,每一位代表一个开关状态。

不难发现,变化其中一位,实际上会导致10个字节的奇偶性发生变化。

所以,只要检测10个字节的奇偶性,就可以控制灯的状态是否翻转。

您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。