C运算符置位

来源:百度知道 编辑:UC知道 时间:2024/04/30 23:38:59
SPCR是这样定义的
Bit 7 6 5 4 3 2 1 0
SPCR SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
下面这个操作
SPCR = (1<<SPE)|(1<<MSTR)|(1<<DORD)|(1<<SPR1)|(1<<SPR0);
是怎么把SPCR中的SPE DORD MSTR SPR1 SPR0分别置位的?
搞不懂!各位高人多指教!

前面应该有个常量定义:
SPE=6
MSTR=4
DORD=5
SPR1=1
SPR0=0

SPCR = (1<<SPE)|(1<<MSTR)|(1<<DORD)|(1<<SPR1)|(1<<SPR0);比较容易理解

1<<SPE 既是把1左移6位。 变为 2进制 01000000
1<<MSTR 00001000
1<<DORD 00010000
1<<SPR1 00000010
1<<SPR0 00000001

然后 做或运算。即可得到结果

肯定是把SPIE,SPE,DORD这八个单词都定义成宏,值分别是7,6,5,4,3,2,1,0
因此1<<后面加上相应的宏,就是把1移动到这个宏对应的那个位,比如1<<SPE就是把1移到第6位,也就是得到01000000.
这些只有一个位是1的数,用|连接起来,就得到一个所有的相应位为1,其他位为0的数.