2014-11-01 70 views
-5

我無法找出下面車道是指:簡單的邏輯運算>>&

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

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

回答

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.因此,只有掩碼中的位你的情況×03)可以結束了0以外的任何東西,他們只會爲1,如果他們的價值被掩蓋分別爲1。

0

是位右移操作。

如果PCLKSEL1具有二進制值「ABCDEFGHIJK101abcdefghijklmnpqrs」,其中(AP和as分別爲0或1),PCLKSEL1 >> 18將變爲「00000000000000 0000ABCDEFGHIJK101" 。

&是按位AND運算符。 (X & Y)的結果的第n位爲與X和Y的第n位的第n位的

如果PCLKSEL1具有二進制值「ABCDEFGHIJK101abcdefghijklmnpqrs」,(PCLKSEL1 >> 18) & 0x03將變成'00000000000000000000000000000101'

在其他字中,(PCLKSEL1 >> 18)& 0x03是用於從最左側提取第12到第14位的操作。