位运算实战演练

	//demo1:给定一个整型数a,设置a的bit3,保证其他位不变
	unsigned int a = 0xf00;

	a |= (0x1<<3);

	printf("0x%x\n",a);
	

```c
	//demo2:给定一个整形数a,设置a的bit3~bit7,保持其他位不变。
	unsigned int a = 0xf00;

	a |= (0x1f<<3); 

	printf("0x%x\n",a); //成功为0xff8
	//demo3:给定一个整型数a,清除a的bit15,保证其他位不变。
	unsigned int a = 0xfff0;

	a &= ~(0x1<<15); 

	printf("0x%x\n",a); //成功为0x7ff0
	//demo4:给定一个整形数a,清除a的bit15~bit23,保持其他位不变。
    unsigned int a = 0xfff0;

	a &= ~(0x1ff<<15); 

	printf("0x%x\n",a); //成功为0x7ff0
	//demo5:给定一个整形数a,取出a的bit3~bit8

	unsigned int a = 0x3f8;

	a &= (0x3f<<3); 

	a>>=3;

	printf("0x%x\n",a); //成功为0x3f

有关寄存器的操作

	//demo6:用C语言给一个寄存器的bit7~bit17赋值937(其余位不受影响)。

	unsigned int a = 0xf00f0;  

	a &= ~(0x7ff<<7);

	a |=(937<<7);

	printf("0x%x\n",a); //成功为0xdd4f0 ,执行结果:0xdd4f0
	//demo7:用C语言将一个寄存器的bit7~bit17中的值加17(其余位不受影响)。

	unsigned int a = 0xc0070;

	unsigned int 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.
    表示方法1unsigned int 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); 

猜你喜欢

转载自blog.csdn.net/shun1296/article/details/114441745