我有一個uint8_t,我需要讀/寫特定的位。我將如何去做這件事。具體而言,我的意思是我需要寫入,然後再讀取前一個7位的值和最後一個值作爲另一個值。如何讀取一個無符號int的特定位
編輯:忘了指定,我將這些設置爲大端
我有一個uint8_t,我需要讀/寫特定的位。我將如何去做這件事。具體而言,我的意思是我需要寫入,然後再讀取前一個7位的值和最後一個值作爲另一個值。如何讀取一個無符號int的特定位
編輯:忘了指定,我將這些設置爲大端
您正在尋找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.
什麼是_first_和_last_將取決於你的架構非常方便。由於這個原因,通常人們會談論最少和最重要的位。 –