無符號整數翻轉函數實現reverse_bits(unsigned int value)


題目描述:

  題目要求是:unsigned int reverse_bits(unsigned int value);這個函數的返回值是把value的二進制位模式從左到右變換一下后的值。例如,在32位機器上,25這個值包含下列各個位:

  00000000 00000000 00000000 00011001

函數的返回值應該是2 550 136 832,它的二進制位模式是:

  10011000 00000000 00000000 00000000

要求是:不能讓函數依賴於機器上整型數值的長度。

 

 

答案代碼以及解釋:

  題目看上去是比較簡單的,不知道大家是怎么想的。下意識的第一想是從這個value的最右邊處理,但遇到的問題是不知道該處理到什么時候停止。因為題目說不能假設unsigned int的長度。那你說怎么辦?不看答案,各位怎么想?

 

  下面是書上摘抄的答案,個人加了幾句注釋

 1 unsigned int
 2 reverse_bits(unsigned int value)
 3 {
 4     unsigned int answer;
 5     unsigned int i;
 6     
 7     answer = 0;
 8     
 9     /*把一個unsigned int 數字1一直左移,直到它變成全0的時候,也就得到了該機器內unsigned int的長度*/
10     for (i = 1; i != 0; i <<= 1)
11     {
12         answer <<= 1;
13         if (value & 1) { answer |= 1; }
14         value >>= 1;
15     }
16     
17     return answer;
18 }

 

  個人覺得第10行的代碼是比較妙的,不知道大家怎么想,大家是怎么解決這個問題的。

 

Reference

《C和指針》 人民郵電出版社 P89 3題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM