简单的逻辑运算>> &安培;

时间:2014-11-01 01:23:10

标签: bit-manipulation

我无法找到下面的通道:

pclkdiv = (LPC_SC->PCLKSEL1 >> 18) & 0x03;

操作>>是什么和&代表? PCLKSEL1是32位寄存器。

2 个答案:

答案 0 :(得分:1)

该代码隔离下面箭头指示的两位,并将它们移动到两个最低有效位。

            vv
11111111111111111111111111111111 original value
                              vv
00000000000000000011111111111111 after >>18 (shift right 18 positions)
                              vv
00000000000000000000000000000011 after & 3 (mask out all but the 0th and 1st bits)

这假定为无符号值,并且在移位期间没有对符号位进行特殊处理。 & (AND)是一个屏蔽操作,因为结果在任何位置为1,值和掩码都必须为1(即1 AND 1 = 1,其他都为0.所以只有掩码中的位(0x03)在你的情况下)最终可以得到0以外的任何东西,如果它们被掩盖的值为1,它们将只有1。

答案 1 :(得分:0)

  
    

是位右移操作。

  

如果PCLKSEL1具有二进制值' ABCDEFGHIJK101abcdefghijklmnpqrs'其中(A-P和a-s分别为0或1),PCLKSEL1>> 18将成为" 000000000000000000ABCDEFGHIJK101"。

&安培;是按位AND运算符。 (X& Y)结果的第n位是X的第n位和Y的第n位的AND。

如果PCLKSEL1具有二进制值' ABCDEFGHIJK101abcdefghijklmnpqrs',(PCLKSEL1>> 18)& 0x03将变为&00; 00000000000000000000000000000101'

在其他词语中,(PCLKSEL1>> 18)& 0x03是从最左边提取第12到第14位的操作。