嵌入式C语言之位操作详解


1.位操作符:
    位操作直接将两个操作数按照二进制对应进行操作;
    例:0xaa&(位与)0xf0=0xa0;
    逻辑操作是  两个操作数整体来操作;
    例:0xaa&&(逻辑与)0xf0=1;
    
    嵌入式的移位操作针对于无符号数:左移时右侧补0,右移时左侧补0,相当于逻辑移位
    对于有符号数:左移右侧补0,右移左侧补符号位(正数补0,负数补1),相当于算术移位。

2.寄存器:
    
    寄存器的在设定特定位时不能影响其他位。
    当改变寄存器特定位时:不直接写操作,先读出寄存器整体原来的值,在这个基础上修改我们要修改的地方,然后将修改后的值整体写入寄存器  即:读--改--写
    
    结合位取反可以将寄存器的特定位进行改变。
    当想将指定位置0是,可以利用位与操作,其他位均为f,置0位为0,即可
    
    要置1用位或|  要清零用位与&  要取反用~
    << >>用来构建特殊二进制数
    
    用移位来获取一个特定位为1的二进制数。
    例:#include <stdio.h>
        int main(void)
        {
            unsigned int a;
     
            a=((0x1f<<3)|(0x7<<23));  //输出0x0380 00f8  位或操作可以将两部分结合
            printf("0x%x.\n",a);
            return 0;     
        }
        
    用取反可以获取一个特定位为0的二进制数。

宏:宏体必须有一个括号把内容包括进去
    
 

猜你喜欢

转载自blog.csdn.net/qq_41464499/article/details/83154353