トピック:
ペアリングの交換。プログラミング、整数の奇数ビット及び偶数ビットに切り替え、より少ない命令を使用しようとする(すなわち、ビット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型奇数= 0x2aaaaaaa&NUM。 int型でも= 0x15555555&NUM。 奇数 >> = 1 。 偶数 << = 1 。 返す奇数| でも、 } }。