移位变量或寄存器的含义是什么? 1·;

时间:2014-01-04 01:45:48

标签: operators bit-manipulation shift

我已经了解了按位运算符中的左移和右移寄存器。但我对以下代码感到困惑。 RX_DR转移?那是什么意思 ?这只是一个随机的例子我只需要知道它的含义。

nrf24_configRegister(STATUS,(1<<RX_DR)|(1<<TX_DS)|(1<<MAX_RT));

请帮忙。

1 个答案:

答案 0 :(得分:1)

看起来这些常量是寄存器中各种标志的位数。看nRF24L01.h让我相信他们的价值观是:

#define RX_DR  6
#define TX_DS  5
#define MAX_RT 4

这对应于如下的位布局:

                TX_DS
                v 
(bit #) 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
            ^       ^
(flag)      RX_DR   MAX_RT

这里我标记了8位寄存器中的一些位。第6位是RX_DR标志,第5位是TX_DS标志,第4位是MAX_RT标志。

(1<<RX_DR)|(1<<TX_DS)|(1<<MAX_RT)

这段代码构造一个寄存器值,其中三个位置位,其余位置未置位。它是如何做到的?考虑1<<TX_DS。这取值1(二进制00000001)并将其左移5位,产生32(二进制00100000)。

该值与其他两个标志按位OR运算(|)。 ORing数字组合在一起,产生一个值,其中每个操作数的所有1位都被设置。

1<<RX_DR  == 1<<6 == 01000000 in binary
1<<TX_DS  == 1<<5 == 00100000 in binary
1<<MAX_RT == 1<<4 == 00010000 in binary

ORing 1<<RX_DR1<<TX_DS以及1<<MAX_RT一起提供值112或二进制:

01110000

查看二进制值如何设置位6,5和4?