一.对c语言位操作的复习 2017/11/19 16:50
a&b
:相同为1则为1,否则为0 //
特定位清零用&
比如:
举例:假设原来32位寄存器中的值为:0xAAAAAAAA,我们希望将bit8~bit15清零而其他位不变,
可以将这个数与0xFFFF00FF进行位与即可。a=0xAAAAAAAA, b=0xFFFF00FF, c=a&b;
a|b
:有1则为1,否则为0
//特定位置1用 |
a^b
: 有1则为1,否则为0
//特定位取反用^
常用位运算:与、或、非、移位
位与(&) 位或(|) 位非(取反 ~) 移位(左移<< 右移>>)
使用位运算实现功能
1<<3 等于 0b1000,
即bit3为1
1<<5 等于 0b100000,
即bit5为1
(1<<3)|(1<<5) 等于 0b101000
扩展一下:如何只熄灭中间1颗而点亮旁边2颗
ldr r0, =((0<<3) | (1<<4) | (0<<5))
总结:要置1用|,清零用&,要取反用^,~和<< >>用来构建特定二进制数
(1)如果你要的这个数比较少位为1,大部分位为0,则可通过连续很多个1左移n位得到。
(2)如果你想要的数是比较少位为0,大部分位为1,则可通过先构建其位反数,然后再位取反来得到。举例说明:
1.给定一个整型数a,设置a的bit3,保证其他位不变。
设置即为1,清除即为0
a=a|(1<<3)
2.给定一个整形数a,设置a的bit3~bit7,保持其他位不变。
a=a|(0b11111<<3)
==
a |= (0x1f<<3)
//左移3位说明从bit3开始,
0x1f