移位知识 移位运算

AVR移位算法详细解释 (1<<X) 很多初学者都会被移位算法迷惑,移位算法形如 (1<<X)这样的形式,高手写程序时,习惯用移位算法来写出各个寄存器的使用。比如下面一段是AVR 的USART 的初始

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

腾讯文库移位知识