移位知识 移位运算
AVR移位算法详细解释 (1<<X) 很多初学者都会被移位算法迷惑,移位算法形如 (1<<X)这样的形式,高手写程序时,习惯用移位算法来写出各个寄存器的使用。比如下面一段是AVR 的USART 的初始
AVR1<<X 移位算法详细解释() 1<<X 很多初学者都会被移位算法迷惑,移位算法形如()这样的形式,高手写程序时,习惯用移位算法来写出各个寄存器的使用。比如 AVRUSART 下面一段是的的初始化代码。 UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); UCSR0B=(1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN); //RXCIE=1;TXCIE=1;UDREIE=0;RXEN=1;TXEN=1 这样的写法对高手是福,这些代码里面说明了操作了寄存器的哪些位,能够看出它的操作的意义;对新手确是祸害,因为新手看不懂这样 的程序。 回到开始的地方,解释一下,什么是移位算法: A=(1<<2)100000001200000100A000001000x04 如:,写成二进制就是,这个一左移位就是,所以得到的数为,即。 B=(2<<4)200000010400100000B001000000x20 再如:,写成二进制就是,这个一左移位就是,所以得到的数为,即。 1001<<00000 上面两个移位算法都是正确的,第一种写法,表示第三位为其余都是的数,数的时候是从数起的,再比如()表示的是 00011<<71000000022 ,()表示的是,但是第二种写法没有没有这种意义,移位也用于乘除法,左移一位乘以,右移移位除以,上面的第二种 22×2×2×2×2320x20 写法左移四位得到的数是=,也就是上面的。 UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); 我们再来看上面的这句话: UCSRC 是一个和串口通讯有关的一个八位寄存器,他的每一位都有特殊的定义,我们通过查数据手册可以看到,如下的内容。

