目录
一、异或的使用在机器人项目上的应用
二、异或(XOR)操作的几个特点
三、位运算符在智能驾驶项目上的应用
一、异或的使用在机器人项目上的应用
在当时负责皮带机器人项目中,就有一个很好的应用。此时需要设置电机驱动模块、编码器驱动模块、CPE模块、甲烷、一氧化碳等模块的状态标志位及异常,此时可以使用设置:
static uint32_t mod_fault_flag = 0; /* 模块故障标志位 */
static uint32_t mod_alarm_flag = 0; /* 模块告警标志位 */
在代码的使用:
//确认有模块异常后再切换至待机模式 在遇到mod_fault_flag对应位标志位被置于1时
if(mod_fault_flag && ahead_as_dyp.state == RT_EOK && rear_as_dyp.state == RT_EOK && mark_sign.mode_mark != DEV_BATTERY_CHARGE && mark_sign.mode_mark != DEV_BATTERY_CHARGE_END)
{
// if((mod_fault_flag & (1 << 3)) != 0) //说明"mod_fault_flag 中的 (1 << 3) 为 1
//if((ABS_DIFF(last_mod_fault_tick, rt_tick_get()) >= 2*1000) && ((mod_fault_flag & (1 << 3)) == 0) && ((mod_fault_flag & (1 << 13)) == 0) )
if((ABS_DIFF(last_mod_fault_tick, rt_tick_get()) >= 2*1000) &&
(((mod_fault_flag & (1 << 10)) == 1)
// || ((mod_fault_flag & (1 << 0 )) == 1)
|| ((mod_fault_flag & (1 << 5 )) == 1)
))uint32_t mod_fault_flag = 0;有32位可以供表示,可以表示32个设备状态的故障标志位,完全够用。
二、异或(XOR)操作的几个特点
异或的自反性:两个相同值异或结果为 0。即:a XOR a = 0。
异或的零值性:任何值与 0 异或结果为原值。即:a XOR 0 = a。
异或的交换律:异或操作满足交换律,交换操作数的位置结果不变。即:a XOR b = b XOR a。
异或的结合律:异或操作满足结合律,即多个操作数进行异或操作结果与操作数的顺序无关。即:(a XOR b) XOR c = a XOR (b XOR c)。
异或的消去律:对于某个值进行两次异或相同的操作数,结果为原值。即:(a XOR b) XOR b = a。
异或可用于交换值:通过异或操作可以在不使用额外变量的情况下交换两个变量的值。
这些特点使得异或操作在计算机科学与编程中具有广泛的应用,例如:
nt a=8, b=10;
则按位异或运算如下:
a经过了2次交换,b经过了1次交换。经过该操作后,a,b的值已经进行了交换。这也可以用在交换2个字符串上。
三、位运算符在智能驾驶项目上的应用
在智驾交互箱项目中,处理模式反馈中,也用到了位运算
根据以上协议内容:
uint16_t bit7 = (infoArray[3]>>6)&1;
infoArray[3]=bit7
该操作是将将
infoArray[3]
的第7位(从0开始计数)提取出来,并将其存储在变量bit7
中。通过右移操作符>>
将infoArray[3]
向右移动6位,使得第7位变为最低位。然后,使用按位与运算符&
将结果与1进行按位与操作,以保留最低位的值。最后,将结果赋值给变量bit
在故障信息中表示油泵DC/AC状态也是如此:
infoArray[18] =machineInfo.Falut_level;
uint16_t bit6_7 = (infoArray[18]>>6) &3;
infoArray[18]>>6=bit6_7