你好,感謝任何有機會引導我朝着正確方向發展的人。我對C編程完全陌生,對於一個類,我必須編寫一個名爲rearrangeBits的函數,它將採用一個8位整數,將其轉換爲二進制等值,並將有效位全部移到左邊。因此,舉例來說,如果我通過在25號(0001 1001),該函數返回1110 0000。老師給我們這一點入手:在C中重新排列比特
uint8 rearrangeBits(uint8 v)
{
/* Your code goes here */
}
我一個解決方案,嘗試如下:
uint8 rearrangeBits(uint8 v)
{
unsigned int i;
char bits = 0;
int a = 7;
for(i = 7; i > 0; i--)
{
int test = v >> i;
if(test & 1)
{
bits |= (1 << a);
a--;
}
}
return bits;
}
再次感謝您的幫助,我,最好不尋找答案,但我應該如何正確地處理這個一些指導。
您必須使用'unsigned'類型。位一直向左移動的是未定義行爲*,用於「signed」類型。 'char bits = 0;' - >'uint8_t bits = 0;' –
兩個掩碼 - 一個與與參數在一起測試一個位,一個與或與結果設置一點,如果需要。 –
不是真的重複,但肯定會幫助 - [你如何設置,清除和切換在C/C + +單一位?](http://stackoverflow.com/questions/47981/how-do-you-set-clear -and-toggle-a-single-in-cc) –