2013-10-28 46 views
2

我有一個uint8_t,我需要讀/寫特定的位。我將如何去做這件事。具體而言,我的意思是我需要寫入,然後再讀取前一個7位的值和最後一個值作爲另一個值。如何讀取一個無符號int的特定位

編輯:忘了指定,我將這些設置爲大端

+0

什麼是_first_和_last_將取決於你的架構非常方便。由於這個原因,通常人們會談論最少和最重要的位。 –

回答

4

您正在尋找bitmasking。學習如何使用C的按位運算符:~,|,&,^等等都會有很大的幫助,我建議你看看它們。

否則 - 想讀取最不重要的位?

uint8_t i = 0x03; 

uint8_t j = i & 1; // j is now 1, since i is odd (LSB set) 

,並設置呢?

uint8_t i = 0x02; 
uint8_t j = 0x01; 

i |= (j & 1); // get LSB only of j; i is now 0x03 

想我的七個最顯著位設置爲j的七個最顯著位?

uint8_t j = 24; // or whatever value 
uint8_t i = j & ~(1); // in other words, the inverse of 1, or all bits but 1 set 

想要讀取我的這些位?

i & ~(1); 

想讀取我的第N位(索引從零,其中0是LSB)位?

i & (1 << N); 

並設置它?

i |= (1 << N); // or-equals; no effect if bit is already set 

這些技巧會在你學習C.

+0

這應該完美,我會盡快嘗試,謝謝。 – mavius

+0

要設置LSB,您需要:'i | = j & 1;',而不是'i&= j&1'(或'i = i&(j&1)') – rici

+0

@rici哎呀,對,謝謝。 –

相關問題