我不明白這段代碼在做什麼,有人可以解釋它嗎?這是幹什麼的:「input >> 4&0x0F」?
long input; //just here to show the type, assume it has a value stored
unsigned int output(input >> 4 & 0x0F);
由於
我不明白這段代碼在做什麼,有人可以解釋它嗎?這是幹什麼的:「input >> 4&0x0F」?
long input; //just here to show the type, assume it has a value stored
unsigned int output(input >> 4 & 0x0F);
由於
由低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)
即做逐位右移4位「輸入」的內容移位,然後做的一個位與結果爲0x0F(1101)。
它能做什麼取決於內容,並「輸入」的類型。它是一個int嗎?長?一個字符串(這意味着正在對指向第一個字節的指針進行移位和按位與)。
谷歌爲「C++位操作」對什麼是引擎蓋下事情的更多細節。 此外,請看C++ operator precedence,因爲C/C++優先順序與許多其他語言不完全相同。
&是按位與運算。 「& 0x0F」有時會用0填充前4位,或者忽略第一個(最左邊的)4位的值。
0x0f = 00001111.因此,任何其他位模式的0x0f位操作將只保留最右邊的4位,清除左邊的4位。
如果輸入值爲01010001,在做& 0x0F之後,我們會得到00000001--這是清除左邊4位後得到的模式。
正如另一個例子,這是我在一個項目中使用的代碼:
字節verflag =(字節)(bIsAck &爲0x0F)| ((版本< < 4)& 0xf0)。在這裏,我將兩個值合併爲一個Byte值,以節省空間,因爲它用於數據包頭結構中。 bIsAck是BOOL,版本是一個字節,其值非常小。所以這兩個值都可以包含在一個字節變量中。
在所得變量的第一半字節將包含的版本的值和第二半字節將包含bIsAck的值。我可以通過在接收版本值的同時做一個4位>>來將這些值檢索到單獨的變量。
希望這是一個接近你所要求的地方。
對不起,我應該指定上下文。我已經編輯了原始文章中的代碼。 – PseudoPsyche