位运算符

阅读量: 1005 编辑

计算机数据表示是通过 0,1 两个数字存储的;比如 int a = 8; 那么在计算机上其实是用1000来表示;

它的计算方式,从低位开始,用 n 位上的数字乘以 2的n 次方,最后相加求和;

比如:0*2^0 + 0*2^1 + 0*2^2 + 1*2^3,结果就是 1*2^3 = 8

一、符号介绍

计算机是二进制的表示,比如 int 类型是32位:00000000 00000000 00000000 00000000 ,即32个0表示十进制0

// 11 和 12 都是10进制的。在编程中我们是使用10进制表达的,但是计算机存储是按照二进制存储的
int a = 11;  // 二进制:00000000 00000000 00000000 00001011,或者 1011
int b = 12;  // 二进制:00000000 00000000 00000000 00001100,或者 1100
  • 按位与&,a & b,结果是 1000

  • 按位或|,a | b,结果是 1111

  • 按位异或^,a^b ,结果是 111

  • 按位右移>>,a >> 2,结果是 10 ;向右移动2位(去掉最右边的2位),左边补0

  • 按位左移<<,a << 2,结果是 101100 ; 向左移动2位(去掉最左边的2位),右边补0

  • 按位非~,~a,结果是 10000000 00000000 00000000 00001100

二、位运算符规则

与(&) 0 & 0 = 0 1 & 0 = 0 0 & 1 = 0 1 & 1 = 1
或(|) 0 | 0 = 0 1 | 0 = 1 0 | 1 = 1 1 | 1 = 1
异或(^) 0 ^ 0 = 0 1 ^ 0 = 1 0 ^ 1 = 1 1 ^ 1 = 0

与:两个都是1,结果是1

或:只要有一个是1,结果就是1

异或:0异或任何数结果都是那个数,1异或任何数结果就是那个数取反

三、取反

~a 参考如下四步进行:

00000000 00000000 00000000 00001011     //先获得 a 的二进制表达
    
11111111 11111111 11111111 11110100     //将所有位取反
    
10000000 00000000 00000000 00001011     //第一位符号位不变,其他位再取反
    
10000000 00000000 00000000 00001100     //然后 +1,满2进1,最终得到的是 -12

四、编程实战

代码的详细解读,可以参考视频教程;

public class C18 {

    public static void main(String[] args) {
        int a = 11; //1011
        int b = 12; //1100

        System.out.println(a & b);    //1000
        System.out.println(a | b);    //1111
        System.out.println(a ^ b);    //111
        System.out.println(~a);       //10000000 00000000 00000000 00001100
        System.out.println(a << 2);   //101100
        System.out.println(a >> 2);   //10
        
    }
    
}


爱码岛编程公众号
试卷资料
爱码岛编程小程序
在线刷题
苏ICP备13052010号
©2023 南京匠成信息科技有限公司