java位的运算>>、>>>、或、非、异或、与

        //右移一位(除以2的一次方)
        System.out.println("2>>1=================" + (2 >> 1));//1
        System.out.println("20>>1=================" + (20 >> 1));//10
        System.out.println("200>>1=================" + (200 >> 1));//100

        //右移2位(除以2的2次方)
        System.out.println("2>>2=================" + (2 >> 2));//0
        System.out.println("20>>2=================" + (20 >> 2));//5
        System.out.println("200>>2=================" + (200 >> 2));//50


        //左移一位(乘2的一次方)
        System.out.println("2>>1=================" + (2 << 1));//4
        System.out.println("20>>1=================" + (20 << 1));//40
        System.out.println("200>>1=================" + (200 << 1));//400

        //左移2位(乘以2的2次方)
        System.out.println("2<<2=================" + (2 << 2));//8
        System.out.println("20<<2=================" + (20 << 2));//80
        System.out.println("200<<2=================" + (200 << 2));//800

java中有三种移位运算符

<<      :     左移运算符,num << 1,相当于num乘以2

>>      :     右移运算符,num >> 1,相当于num除以2

>>>     :     无符号右移,忽略符号位,空位都以0补齐

测试:

public class TestBinary {

    public static void main(String[] args) {
        //左移一位
        printInfo(10 << 1);//20
        //右移一位
        printInfo(10 >> 1);//5
        //右移一位
        printInfo(10 >>> 1);//5

        // 左移一位
        printInfo(-10 << 1);//-20
        //右移一位
        printInfo(-10 >> 1);//-5
        //右移一位
        printInfo(-10 >>> 1);//2147483643
    }

    /**
     * 输出一个int的二进制数
     *
     * @param num
     */
    private static void printInfo(int num) {
        System.out.println(num + "的二进制为======" + Integer.toBinaryString(num));
    }

}

结果

20的二进制为======10100
   5的二进制为======101
   5的二进制为======101
      -20的二进制为======11111111111111111111111111101100
       -5的二进制为======11111111111111111111111111111011
2147483643的二进制为======1111111111111111111111111111011

无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位 无符号右移运算符>>> 只是对32位和64位的值有意义。

//【非】运算符用符号“~”表示,其运算规律如下:如果位为0,结果是1,如果位为1,结果是0
int a = 2;
printInfo((a));
printInfo((~a));

结果为:

							   2的二进制为======10
-3的二进制为======11111111111111111111111111111101

异或

//【异或】运算符是用符号“^”表示的,其运算规律是:两个操作数的位中,相同则结果为0,不同则结果为1
int a1 = 15;
int b1 = 2;
printInfo(a1);
printInfo(b1);
printInfo(a1 ^ b1);

结果为:

15的二进制为======1111
   2的二进制为======10
13的二进制为======1101

//【或】运算符用符号“|”表示,其运算规律如下:两个位只要有一个为1,那么结果就是1,否则就为0
int a2 = 129;
int b2 = 128;
printInfo(a2);
printInfo(b2);
printInfo(a2 | b2);

结果为:

129的二进制为======10000001
128的二进制为======10000000
129的二进制为======10000001

//【与】运算符用符号“&”表示,其使用规律如下:两个操作数中位都为1,结果才为1,否则结果为0
int a3 = 129;
int b3 = 128;
printInfo(a3);
printInfo(b3);
printInfo(a3 & b3);

结果为:

129的二进制为======10000001
128的二进制为======10000000
128的二进制为======10000000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值