颠倒二进制(java)
颠倒给定的 32 位无符号整数的二进制位。
1、使用位运算
int result = 0;
for(int i = 0;i<32;i++){
int bit = n % 2;
n = n >> 1;
result = (result << 1) ^ bit;
}
return result;
}
其中int bit = n%2可以用int bit = n & 1 替代。
2、使用自带函数
// int result = Integer.reverse(n);
3、我的困惑
为什么在运行n % 2的方法会有如下报错:
输入:
11111111111111111111111111111101
输出:
2505397589 (10010101010101010101010101010101)
预期结果:
3221225471 (10111111111111111111111111111111)
而n & 1则没有