反轉32位數

2021-09-30 07:01:07 字數 1131 閱讀 9828

1、問題

把乙個32位的數按位反轉,就是第32位轉到第1位,第31位轉到第2位…………

什麼樣的演算法最節省效率?

2、解答

un

signed

int bit_reverse(

unsigned

int n)

第一行**為奇偶位相互交換;第二行為以兩位為一單元,奇偶單元進行交換;第三行為以四位為一單元,奇偶單元進行交換;第四行為以八位為一單元,奇偶單元進行交換;最後一行為以十六位為一單元,奇偶單元進行交換。至此,32位反轉完成,演算法結束。

3、演繹:

上述奇偶、2、

4、8、

16的交換方法可以演變有

四種實現形式,本質一樣

,可以都先移後取、都先取後移以及乙個先移後取、另乙個先取後移

受上面程式啟發,可以考慮16、

8、4、

2、奇偶來實現交換,即先將

左右整體換邊,再處理區域性換邊的問題,

將32位分成兩個

16位的箭頭,折半互換有兩種實現方式:

一,先把每個箭頭換向,整體分別左移或右移

16位,即可;

問題是每個箭頭怎麼換向?問題又成了

16位數怎麼折半互換

,再分成兩個

8位的箭頭,如上方法,依次實現,最後就是奇偶互換了,

可以形成遞迴演算法

;或者將1的

思路反相考慮

,直接奇偶互換,2、

2互換,4、

4互換,8、

8互換,16、

16互換即可,是一種

倒推條件的方法,

對應於原作者的方法。

二,先把兩個箭頭的位置互換,即16、

16互換;再將每個箭頭分成兩份,兩組8、

8互換,依次類推,4組

4、4互換,8組

2、2互換,

16組奇偶互換,實

現方法和思考方法一致。

第二種方法更容易想到,

借鑑了二分查詢的思想,逐層分半。

反轉32 位數

筆試的時候遇見一道這樣的題目,不會做.回來趕緊上網找.感覺牛人就是牛人.這樣的演算法我為啥就是想不出來呢 把乙個32位的數按位反轉,就是第32位轉到第1位,第31位轉到第2位 什麼樣的演算法最節省效率?參考http www.yuanma.org data 2007 0723 article 2763...

三位數反轉

問題描述 輸入乙個三位數,分離出它的百位 十位和個位,反轉後輸出 樣例輸入 127樣例輸出 721分析 首先將三位數讀入變數n,然後進行分離。百位等於n 100,十位等於n 10 10,個位等於n 10。程式如下 include intmain 此處有乙個細節,即 如果個位是0,反轉後應該輸出嗎?例...

36位數相加

源 1 package e08 public class bigint publicbigint string s publicint getbig publicbigint add bigint bi for inti big.length b.length i 0 i c i big i ret...