2010-01-24 106 views

回答

31

它設置位掩碼:

1U << 0 = 1 
1U << 1 = 2 
1U << 2 = 4 
etc... 

什麼情況是1U(無符號值1)由x位左移。

您發佈的代碼等價於:

enum 
{ 
     IsDynamic = 1U, // binary: 00000000000000000000000000000001 
     IsSharable = 2U, // binary: 00000000000000000000000000000010 
     IsStrong = 4U // binary: 00000000000000000000000000000100 
} 
2

位移位。而不是說a = 1,b = 2,c = 4,他們移位。 這個想法是將許多標誌打包成一個整數(或長整數)。

這實際上是一個非常乾淨的方法。

2

< <是位位移運算符。它將採用左側的位並將其移位右側指定的量。例如:

1 << 1 -> 0b0001 << 1  => 0b0010 
1 << 2 -> 0b0001 << 2  => 0b0100 

0

1U是一個無符號的值與單個位0組,並且所有其它位清零。運營商的意思是「向左移動」。 1U << 0表示創建一個位0的值; 1U << 1表示用位1設置創建一個值;等

0

即片斷

enum 
{ 
     IsDynamic = (1U << 0), // ... 
     IsSharable = (1U << 1), // ... 
     IsStrong = (1U << 2) // ... 
} 

聲明瞭將被推測用作在其上包含多個標誌的值的掩模2的冪的值的枚舉。

因此,例如,代表東西值IsDynamic和IsSharable是

unsigned value = IsDynamic | IsSharable; // could use + as well 

而且測試是否值IsStrong

if (value & IsStrong) { ... } 
相關問題