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的二进制数。
宏:宏体必须有一个括号把内容包括进去