C中移位符的一個小應用

轉自《C和指針》

在寫程序時,對於整數類型的值,不同的機器有着不同的存儲位數,比如對於int類型,有的機器是32位的,有的是16位的,這樣就涉及了程序的移植性問題。

現有如下需求:請編寫函數unsigned int reverse_bits(unsigned int value),函數返回值爲把value的二進制位前後顛倒後的結果,例如在16位機器上,1的二進制形式爲0000 0000 0000 0001,函數返回值爲1000 0000 0000 0000,編寫函數時要注意不要讓其依賴機器的整型值長度,以增強程序的可移植性。


實現如下:

unsigned int reverse_bits(unsigned int value){
    unsigned int result=0,i=1;
 
    for(;i!=0;i<<=1){//通過i移位直至爲0來確定循環的次數,不依賴機器的整型值長度
        result<<=1;
        if(value&1){
            result|=1;
        }
        value>>=1;
    }
    return result;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章