2012-02-16 78 views

回答

4

< <是C. 移位算所以你定義BLABLABLABLABLA通過零值與由2位數字向左移位一個二進制1。

結果值則是: ... 00000100

你通常會做這做面膜的事情。 因此,假設你有一個狀態字節,每一位都是一個標誌。 如果第三位被設置,這意味着BLABLABLABLABLA,你會這樣做:

int blablaFlag = statusByte & BLABLABLABLABLA;

如果這個值大於0,表示您的標誌已設置。

1

他們定義常量,使用C預處理程序。所以,你在你的代碼將與1 << 2由預處理器來代替使用XXXXXXXXXXXX每次的一種方式。

1

#define只是意味着只要BLABLABLABLA是看,是換成(1 << 2)
所以,如果你寫int x=BLABLABLABLA;,就好像你寫了int x=(1 << 2);
<<是左移操作符。

3

這些定義可以在比特存儲信息(標誌)時,可以使用:

#define HAS_SOMETHING (1 << 2) 
#define HAS_ANOTHER (1 << 3) 

int flags = 0; 

if (has_something()) 
    flags |= HAS_SOMETHING; 
if (has_another()) 
    flags |= HAS_ANOTHER; 

// ... later: 

if (flags & HAS_SOMETHING) 
    do_something(); 

使用 預處理指令設置或取消設置這些標誌使代碼的方式比這會更易讀:

if (flags & 4) // 4 is 1 lsh 2 
    do_something(); 
1

<<>>轉變運營商,他們在二進制工作。

42用十進制表示42,二進制表示爲101010。

當您使用的運營商:

  The binary representation of 42 is :  101010 
42 << 1 : 101010 is "shifted" to the left, becoming 1010100, thus 84. 
42 >> 1 : 101010 is "shifted" to the right, becoming 10101, thus 21. 

這是用於標記爲可讀性目的:它更易於閱讀1 << 11 << 21 << 3124

相關問題