将整数的二进制位进行奇偶位置互换
package _1_Bit_Operation; import java.util.Scanner; /** * @Auther: YuanJun * @Date: 2021/12/9 - 12 - 09 - 10:40 * @Description: _1_Bit_Operation */ //将整数的二进制位进行奇偶位置互换 public class test8 { //这是一个main方法,是程序的入口: public static void main(String[] args) { /** * 奇数位用x表示,偶数位用y表示 * 先保留偶数位 * x y x y x y x y * & 1 0 1 0 1 0 1 0 * -------------------- * x 0 x 0 x 0 x 0 * 再保留奇数位 * x y x y x y x y * & 0 1 0 1 0 1 0 1 * -------------------- * 0 y 0 y 0 y 0 y * * 保留的奇数位数左移一位,保留的偶数位数右移一位,移位后进行异或运算 * 0 x 0 x 0 x 0 x * ^ y 0 y 0 y 0 y 0 * -------------------- * y x y x y x y x * * 如: 10100 20 * 00000000 00000000 00000000 00010100 -> 20 * 奇偶位置互换后得到 * 00000000 00000000 00000000 00101000 -> 40 * * 1.取偶数位 * 00000000 00000000 00000000 00010100 * & 10101010 10101010 10101010 10101010 * -------------------------------------- * 00000000 00000000 00000000 00000000 * 2.取奇数位 * 00000000 00000000 00000000 00010100 * & 01010101 01010101 01010101 01010101 * -------------------------------------- * 00000000 00000000 00000000 00010100 * 3.偶数位右移一位,奇数位左移一位,再进行异或运算 * 00000000 00000000 00000000 00000000 * ^ 00000000 00000000 00000000 00101000 * -------------------------------------- * 00000000 00000000 00000000 00101000 得到 -> 40 */ Scanner input = new Scanner(System.in); System.out.println("请输入一个整数:"); int n = input.nextInt(); int ji = n & 0x5555555; //n&01010101 01010101 01010101 01010101 int ou = n & 0xaaaaaaa; //n&10101010 10101010 10101010 10101010 int m = (ji<<1)^(ou>>1); System.out.println(m); } }