位运算符

位运算符

首先要知道数字在计算机中的存储形式,转化为二进制,正数(原码,补码),负数以补码形式存在对于一个负数,进行位运算首先把数字换成它的原码形式,然后再反码,再补码,对补码进行位运算,然后,把结果反码再原码,再十进制。

&与运算符

如果相对应位都是1,则结果为1,否则为0

public static void main(String[] args) {
    int n = 2;
    int m = 3;
    // n: 0010
    // m: 0011
    // &:-------
    //    0010
    System.out.println(n&m); // 2
    }

|或运算符

如果相对应位都是 0,则结果为 0,否则为 1

public static void main(String[] args) {
    int n = 2;
    int m = 3;
    // n: 0010
    // m: 0011
    // |:-------
    //    0011
    System.out.println(n|m);
    }

^异或运算符

如果相对应位值相同,则结果为0,否则为1

public static void main(String[] args) {
    int n = 2;
    int m = 6;
    // n: 0010
    // m: 0110
    // |:-------
    //    0100
    System.out.println(n^m);
    }

~非运算符

加1乘以-1

public static void main(String[] args) {
	byte p = 1;
        byte p2 = -1;
        // 对于正数p来说,结果是加1*-1
        System.out.println(~p);
        // 对于负数p来说,结果是加1*-1
        System.out.println(~p2);
        int num = 987654321;
        // -987654322
        System.out.println(~num);
}

<<左移运算符

按位左移运算符。左操作数按位左移右操作数指定的位数。
m<<n相当于m乘以2的n次方

// 相对于2* 2的3次方
        byte b = 2 << 3;
        System.out.println(b);  // 16
        // 4:0000 0100.
        //    0001 0000.
        System.out.println( 4 << 2);  // 16
        // -4:1000 0100  |  1111 1011  |  1111 1100
        // 1100 0000  | 1101 1111  | 1010 0000
        System.out.println(-4 << 3);  // -32

>>右移运算符

按位右移运算符。左操作数按位右移右操作数指定的位数。
m>>n 相对于m除以2的n次方

// -20: 1001 0100 | 1110 1011 |  1110 1100
// -20右移3位 1111 1101  |  1111 1100  |  1000 0011 
System.out.println(-20>>3);  //-3

无符号位右移>>>

按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。

byte b = -8;
        // 把-8换成int型的补码,右移,左边高位补零,忽略符号位
        // b:1000 1000 | 1111 0111 |  1111 1000.
        // 1111 1111 1111 1111 1111 1111 1111 1000.
        // 001111 1111 1111 1111 1111 1111 1111 10
        System.out.println(b >>> 2); //1073741822
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值