//demo1:给定一个整型数a,设置a的bit3,保证其他位不变unsignedint a =0xf00;
a |=(0x1<<3);printf("0x%x\n",a);
```c
//demo2:给定一个整形数a,设置a的bit3~bit7,保持其他位不变。unsignedint a =0xf00;
a |=(0x1f<<3);printf("0x%x\n",a);//成功为0xff8
//demo3:给定一个整型数a,清除a的bit15,保证其他位不变。unsignedint a =0xfff0;
a &=~(0x1<<15);printf("0x%x\n",a);//成功为0x7ff0
//demo4:给定一个整形数a,清除a的bit15~bit23,保持其他位不变。unsignedint a =0xfff0;
a &=~(0x1ff<<15);printf("0x%x\n",a);//成功为0x7ff0
//demo5:给定一个整形数a,取出a的bit3~bit8unsignedint a =0x3f8;
a &=(0x3f<<3);
a>>=3;printf("0x%x\n",a);//成功为0x3f
有关寄存器的操作
//demo6:用C语言给一个寄存器的bit7~bit17赋值937(其余位不受影响)。unsignedint a =0xf00f0;
a &=~(0x7ff<<7);
a |=(937<<7);printf("0x%x\n",a);//成功为0xdd4f0 ,执行结果:0xdd4f0
//demo7:用C语言将一个寄存器的bit7~bit17中的值加17(其余位不受影响)。unsignedint a =0xc0070;unsignedint temp =0;//取出bit7~bit17中的值
temp =(a &(0x7ff<<7));//bit7~bit17中的值加17
temp +=(17<<7);//清空a的bit7~bit17
a &=(~(0x7ff<<7));//a的bit7~bit17,加入temp
a +=temp;printf("0x%x\n",a);//若成功为:0xc08f0,结果为:0xc08f0
//demo8:用C语言给一个寄存器的bit7~bit17赋值937,同时给bit21~bit25赋值17.
表示方法1:
unsignedint a =0xf00f0;
a &=~(0x7ff<<7);
a |=(937<<7);
a &=~(0x1f<<21);
a |=(17<<7);printf("0x%x\n",a);
表示方法2:
a &=(~(0x7ff<<7)|(17<<7));
a |=((937<<7)|(17<<7));printf("0x%x\n",a);