2010-07-17 60 views
19

可以說我有一個int變量n = 8。在大多數機器上這將是一個32位的值。我怎樣才能得到這個二進制的低8位(最低字節)?另外我怎樣才能訪問每一個位,找出它是什麼? 我的問題是有關至C如何獲取int的低8位?

回答

30
unsigned n = 8; 
unsigned low8bits = n & 0xFF; 

注意的幾件事情:

  1. 對於位運算,始終使用unsigned類型
  2. 位可以使用二進制掩蔽與&操作
  3. 要進入低的數字提取8位掩碼是0xFF,因爲在二進制中它有低8位打開,其餘0位數字的低8位8 ... 8(想想了一會兒)

要訪問一些特定的比特,說k個位:

unsigned n = ...; 
unsigned kthbit = (1 << k) & n; 

現在,kthbit會如果0的nk第i位是0,並且一些正數(2**k)如果nk個位爲1

15

使用按位算術屏蔽掉最低8位:

unsigned char c = (x & 0xFF); 

要訪問的第n個最低位時,方程是(x & (1 << n))(零n表示至少顯著位) 。零的結果表示該位清零,而非零表示該位被置位。

2

可以Ť EST如果一個特定的位被設置在使用< <和&,即數:如果第四位被設置或不

if (num & (1<<3)) ...

將測試。

同樣,您可以通過使用&以及僅設置最低8位的數字(即num & 255num & 0xFF(十六進制))來提取最低8位(作爲整數)。

7

最好的方法是使用具有適當值的位邏輯運算符&。

所以對於低8位:

n & 0xFF; /* 0xFF == all the lower 8 bits set */ 

或者作爲一般規則:

n & ((1<<8)-1) /* generate 0x100 then subtract 1, thus 0xFF */ 

您可以用移位操作結合起來,得到一個特定的位:

(n & (1<<3))>>3; 
    /* will give the value of the 3rd bit - note the >>3 is just to make the value either 0, or 1, not 0 or non-0 */ 
+0

第一位表示「0」位還是「第1位」? – 2014-08-22 16:54:46