与えられた32ビットの符号なし2進整数を逆転させました。
例1:
入力: 00000010100101000001111010011100 出力: 00111001011110000010100101000000を 説明:入力バイナリ列00000010100101000001111010011100符号なし整数43261596 、 リターン964176192、バイナリ形式で表現される00111001011110000010100101000000。
例2:
入力: 11111111111111111111111111111101 出力: 10111111111111111111111111111111を 説明:入力バイナリストリング11111111111111111111111111111101符号なし整数4294967293を、 したがってそのバイナリ表現が3221225471である返し10101111110010110010011101101001。
ヒント:
- (Javaなど)いくつかの言語では、何の符号なし整数型がありませんので、予めご了承ください。この場合には、入力と出力は、符号付き整数型として指定され、実装に影響を及ぼすべきではない整数を符号付きまたは符号なしの両方ので、内部のバイナリ表現は同じです。
- Javaでは、コンパイラが使用する2の補数の符号付き整数を表す表記。したがって、上記で 例2 、入力が符号付き整数を表し
-3
、符号付き整数を出力します-1073741825
。
高度:
あなたはこの関数を繰り返し呼び出す場合、あなたはどのようにあなたのアルゴリズムを最適化するのだろうか?
public class Solution {
// you need treat n as an unsigned value
public int reverseBits(int n) {
int m = 0;
for(int i=0;i<32;i++) {
m<<=1;
m = m |(n&1);
n>>=1;
}
return m;
}
}