负数在位运算中的表现是:左移时,低位补0,右移时高位补1。若左移次数超过变量位数,结果均为0;右移次数超过,则全为1。对于正数,左移和右移都只补0,无论左移还是右移,超出部分保持原样。
在STM32F104RGT6这样的测试平台上,不同长度的数据进行位运算时,系统会先将它们右端对齐,负数左边补1,正数补0。位运算在嵌入式开发中特别实用,比如I/O操作中,单片机如STM32的端口有多个位,通过位带操作或位运算可以方便地改变特定位的电平状态。
以STM32的端口寄存器为例,假设地址为0x20000004,16位的寄存器中每个引脚代表一位。位带操作可以避免直接操作引脚,而是使用位运算符如&和|,如将某个位清零或置1。这里以&=为例,通过一个临时变量temp存储地址值,然后与0x01取反后再赋值回地址,实现清零特定位的目的。
然而,这种操作存在潜在风险,因为它可能涉及多条汇编指令,包括读取、修改和存储,如果在操作过程中外部状态改变,可能导致错误。因此,使用时需确保操作的连续性,避免中断影响。
异或(||)操作则可以用于实现LED闪烁等需要数据翻转的应用,通过异或操作使数据在0和1之间交替,配合其他操作可以实现简单的状态控制。
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。