java运算符 与(&)、非(~)、或(|)、异或(^)

与运算符

使用符号“&”表示。

两个操作数中位都是1,结果才是1,否则结果是0。

package utils;

/**
 * 位数不够前面补0
 */
public class OperatorTest {
    public static void main(String[] args) {
        int a = 1345;
        int b = 2467;
        System.out.println("a&b值为:"+(a&b));
        System.out.println("a转二进制值:"+Long.toBinaryString(a));
        System.out.println("b转二进制值:"+Long.toBinaryString(b));
        System.out.println("a&b:"+Long.toBinaryString(a) +"&" +Long.toBinaryString(b)+"的二进制值:100000001");
        System.out.println("二进制转十进制值:"+Integer.parseInt("100000001",2));
    }
}

在这里插入图片描述

或运算符

使用符号“|”表示。

两个位只要有一个是1,那么结果就是1,否则就是0。

package utils;

/**
 * 位数不够前面补0
 */
public class OperatorTest {
    public static void main(String[] args) {
        int a = 1345;
        int b = 2467;
        System.out.println("a|b值为:"+(a|b));
        System.out.println("a转二进制值:"+Long.toBinaryString(a));
        System.out.println("b转二进制值:"+Long.toBinaryString(b));
        System.out.println("a|b:"+Long.toBinaryString(a) +"|" +Long.toBinaryString(b)+"的二进制值:110111100011");
        System.out.println("二进制转十进制值:"+Integer.parseInt("110111100011",2));
    }
}

在这里插入图片描述

非运算符

使用符号“~”表示。

如果位是0,结果是1,如果位是1,结果是0。

package utils;

/**
 * 操作数的第n位为1,那么结果的第n位为0,反之
 */
public class OperatorTest {
    public static void main(String[] args) {
        int a = 1345;
        System.out.println("a值为:"+~a);
        System.out.println("a转二进制值:"+Long.toBinaryString(a));
        System.out.println("~a转二进制值:"+Long.toBinaryString(~a));
        System.out.println("a值补零二进制值:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0101 0100 0001");
        System.out.println("a值取~二进制值: 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1010 1011 1110");
    }
}

在这里插入图片描述

异或运算符

使用符号“^”表示。

两个操作数的位中,相同则结果是0,不同则结果是1。

package utils;

/**
 * 两个操作数的位中,相同则结果是0,不同则结果是1
 */
public class OperatorTest {
    public static void main(String[] args) {
        int a = 1345;
        int b = 2467;
        System.out.println("a^b值为:"+(a^b));
        System.out.println("a转二进制值:"+Long.toBinaryString(a));
        System.out.println("b转二进制值:"+Long.toBinaryString(b));
        System.out.println("a^b:"+Long.toBinaryString(a) +"^" +Long.toBinaryString(b)+"的二进制值:110011100010");
        System.out.println("二进制转十进制值:"+Integer.parseInt("110011100010",2));
    }
}

在这里插入图片描述

取模(求余)运算符

使用符号%表示。

除完以后剩余的数。

package utils;

/**
 * 除完剩余的数
 */
public class OperatorTest {
    public static void main(String[] args) {
        System.out.println(5%2);
    }
}

在这里插入图片描述

左移运算符

使用符号<<表示。

package utils;

/**
 * 左移
 */
public class OperatorTest {
    public static void main(String[] args) {
        System.out.println("10<<2值:"+(10<<2));
        System.out.println("10转二进制值:"+Integer.toBinaryString(10));
        System.out.println("1010左移2位值:101000");
        System.out.println("二进制转十进制值:"+Integer.parseInt("101000",2));
    }
}

在这里插入图片描述

右移运算符

使用符号>>表示。

package utils;

/**
 * 右移
 */
public class OperatorTest {
    public static void main(String[] args) {
        System.out.println("10>>2值:"+(10>>2));
        System.out.println("10转二进制值:"+Integer.toBinaryString(10));
        System.out.println("1010右移2位值:10");
        System.out.println("二进制转十进制值:"+Integer.parseInt("10",2));
    }
}

在这里插入图片描述

无符号右移

使用符号>>>表示。

package utils;

/**
 * 无符号右移
 */
public class OperatorTest {
    public static void main(String[] args) {
        System.out.println(5>>3);//结果是0
        System.out.println(-5>>3);//结果是-1
        System.out.println(-5>>>3);//结果是536870911
    }
}

在这里插入图片描述
5换算成二进制: 0000 0000 0000 0000 0000 0000 0000 0101

5右移3位后结果为0,0的二进制为: 0000 0000 0000 0000 0000 0000 0000 0000 // (用0进行补位)

-5换算成二进制: 1111 1111 1111 1111 1111 1111 1111 1011

-5右移3位后结果为-1,-1的二进制为: 1111 1111 1111 1111 1111 1111 1111 1111 // (用1进行补位)

-5无符号右移3位后的结果 536870911 换算成二进制: 0001 1111 1111 1111 1111 1111 1111 1111 // (用0进行补位)

注意:
1.正数右移,高位用0补,负数右移,高位用1补,当负数使用无符号右移时,用0进行部位,就变成正数了。

2.正数或者负数左移,低位都是用0补。

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泡^泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值