2012-09-20 41 views

回答

12

由低4位bitshifts輸入4位到右側,然後掩模。

取本實施例16的比特數:(點只是爲了視覺分離)

1001.1111.1101.1001 >> 4 = 0000.1001.1111.1101 

0000.1001.1111.1101 & 0x0F = 1101 (or 0000.0000.0000.1101 to be more explicit) 
2

即做逐位右移4位「輸入」的內容移位,然後做的一個位與結果爲0x0F(1101)。

它能做什麼取決於內容,並「輸入」的類型。它是一個int嗎?長?一個字符串(這意味着正在對指向第一個字節的指針進行移位和按位與)。

谷歌爲「C++位操作」對什麼是引擎蓋下事情的更多細節。 此外,請看C++ operator precedence,因爲C/C++優先順序與許多其他語言不完全相同。

+0

對不起,我應該指定上下文。我已經編輯了原始文章中的代碼。 – PseudoPsyche

1

&是按位與運算。 「& 0x0F」有時會用0填充前4位,或者忽略第一個(最左邊的)4位的值。

0x0f = 00001111.因此,任何其他位模式的0x0f位操作將只保留最右邊的4位,清除左邊的4位。

如果輸入值爲01010001,在做& 0x0F之後,我們會得到00000001--這是清除左邊4位後得到的模式。

正如另一個例子,這是我在一個項目中使用的代碼:

字節verflag =(字節)(bIsAck &爲0x0F)| ((版本< < 4)& 0xf0)。在這裏,我將兩個值合併爲一個Byte值,以節省空間,因爲它用於數據包頭結構中。 bIsAck是BOOL,版本是一個字節,其值非常小。所以這兩個值都可以包含在一個字節變量中。

在所得變量的第一半字節將包含的版本的值和第二半字節將包含bIsAck的值。我可以通過在接收版本值的同時做一個4位>>來將這些值檢索到單獨的變量。

希望這是一個接近你所要求的地方。

相關問題