インタビューの質問05.07。ペア交換

トピック:

ペアリングの交換。プログラミング、整数の奇数ビット及び偶数ビットに切り替え、より少ない命令を使用しようとする(すなわち、ビット0と1ビット交換は、交換機2は3ビットなどのビット)。

例1:

入力:NUM = 2(又は0b10と)
出力1(又は0B01)
例2:

入力:NUM = 3
出力:3
注意:

NUM範囲間 - [0、2 ^ 301]、整数オーバーフローが発生しません。

 

回答:

正直な方法:

クラスのソリューション{
 パブリックint型 exchangeBits(int型数値){
         int型のX1、X2;
        以下のためにINT iが= 1 ; I < 32、I + = 2 ){ 
            X1 = NUM&(1 << I)。
            X2 = NUM&(1 <<(I- 1 ))。
            もし(X1){ 
                NUM | =(X1 >> 1 ); 
            } 
            {
                 場合(X2){ 
                    NUM ^ =(1 <<(I- 1 ))。
                } 
            } 
            もし(X2){ 
                NUM | =(X2 << 1 )。
            } 
            {
                 場合(X1){ 
                    NUM ^ =(1 << I)。
                } 
            } 
        } 
        戻りNUM。
    } 
}。

面積法をコメント、唖然:

まず奇数ビット、偶数ビット及びスクリーニングをスクリーニングします。その後、1を左と右の旧1は、求めたり。

クラス解決{
 パブリックINT exchangeBits(INT NUM){
         int型奇数= 0x2aaaaaaaNUM。
        int型でも= 0x15555555NUM。
        奇数 >> = 1 
        偶数 << = 1 返す奇数| でも、
    } 
}。

 

おすすめ

転載: www.cnblogs.com/FdWzy/p/12617129.html