我们都知道计算机里的数据都是以二进制形式存储的,所谓的位运算可以理解为直接对内存中的二进制数据进行操作,所以速度会比较快。

这边先写个二进制输出方法

 
private static void printBinaryNumber(int n){
        String num = Integer.toBinaryString(n);
        if(num.length() == 32){
            System.out.println(num);
        }else{
            StringBuilder sb = new StringBuilder("");
            for(int i = 0;i < 32 - num.length(); i ++){
                sb.append("0");
            }
            System.out.println(sb.toString() + num);
        }
    }

 

位操作符介绍

1、~操作符(取反),对应二进制位取反,0变成1,1变成0

1 int num = 5;
2 printBinaryNumber(num);
3 printBinaryNumber(~num);

结果

Java里位操作总结

 

 

 

2、&操作符(与),对应二进制位进行与操作,都为1时变成1,其他变为0

 
1 int num1 = 5;
2 int num2 = 6;
3 printBinaryNumber(num1);
4 printBinaryNumber(num2);
5 printBinaryNumber(num1 & num2);

结果

Java里位操作总结

 

 

 3、|操作符(或)对应二进制位进行或操作,都为0时变成0,其他变为1

 
1 int num1 = 2;
2 int num2 = 9;
3 printBinaryNumber(num1);
4 printBinaryNumber(num2);
5 printBinaryNumber(num1 | num2);

结果

Java里位操作总结

 

 

 

4、^操作符(异或),对应二进制位相同时,该位变成0,否则变成1

 
1 int num1 = 3;
2 int num2 = 9;
3 printBinaryNumber(num1);
4 printBinaryNumber(num2);
5 printBinaryNumber(num1 ^ num2);

结果

Java里位操作总结

 

 

5、<<操作(左移),二进制位向左移动,右边填充0

 
1 int num = 3;
2 printBinaryNumber(num);
3 printBinaryNumber(num << 2);

结果

Java里位操作总结

 

 

6、>>操作(右移),二进制位向右移动,左边填充0

 
1 int num = 4;
2 printBinaryNumber(num);
3 printBinaryNumber(num >> 2);

结果

Java里位操作总结

 

 

常见的位操作应用

1、不使用中间变量交换两个数

 
int num1 = 3;
int num2 = 9;
num1 = num1 ^ num2;
num2 = num2 ^ num1;
num1 = num1 ^ num2;
System.out.println("num1:" + num1 +"\n"+ "num2:" + num2 );

结果

Java里位操作总结

 

 

2、求2的N次方

 
1 //求2的16次方:
2 System.out.println(Math.pow(2, 16));
3 System.out.println(1L << 16);

结果

Java里位操作总结

 

 

3、判断奇数偶数

 
1 int num1 = 2;
2         int num2 = 7;
3         if(num1 % 2 == 0){
4             System.out.println("偶数");
5         }else{
6             System.out.println("奇数");
7         }
8         System.out.println((((int)num1 & 1) == 1) ? "奇数" : "偶数");
9         System.out.println((((int)num2 & 1) == 1) ? "奇数" : "偶数");

结果

Java里位操作总结

 

 

4、求绝对值

 
1 int num = -9;
2         System.out.println(Math.abs(num));
3         int i = num >> 31;
4         System.out.println(i == 0 ? num : (~num + 1));

结果

Java里位操作总结

 

相关文章: