
位运算
& 特定位清0
|特定位置1
~ 特定位取反
^(位异或) 相异就是1
int main
{
int a = 45;
int b = ~a;
printf("%d\n", b);
}
b=-46
int main
{
unsigned int a = 45;
unsigned int b = ~a;
printf("%u\n", b);
}
b=4294967250
寄存器 *** 作原则:不影响其他位-通过读改写
特定位设置
bit3~bit7设置位1(0x1F<<3)(0b11111<<3)
bit4~bit10设置为1(0xF<<0)|(0xfffff8<<11)
或者先构造bit4~bit10设置为0,然后按位取反~(0x7f<<4)
设置a的bit3
a |= (1<<3);
清除a的bit15 a&=(~(1<<15))
读取:取出bit3~bit8
第一步先将bit3~bit8不变,其他全部清0,第二步右移3位
a&=(0x3F<<3)
a>>=a3
赋值:给bit7~bitbit17赋值937(写入要先清0,再写入)
第一步先将bit7~bit17清0,再将937写入bit7~bit17
a&=~(0x3FF<<7) //清0
a|=(937<<7) //写入
读改写:给bit7~bit17加17
第一步:先读出来,int tmp =a&(3F<<7); tmp>>=7;
第二步,加17 tmp+=17;
第三步,给bit7~bit17清0 a&=~(0x3F<<7)
第四步,将第二步的数写入bit7~bit17 a|=tmp<<7;
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)