Java中与或非、异或、位运算(一目了然,超级详细!!! 深入解析)

本文深入解析Java中的位运算,包括与、或、非、异或、左移、右移等操作,通过具体示例展示了位运算的基本原理及计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

具体内容如下

public class Demo {

    @Test
    public void test1() {
        //java与操作:两个操作数中都为1,结果才为1,否则结果为0
        int a = 5;  //二进制表示0000 0101
        int b = 6;  //二进制表示0000 0110

        //故a&b => 0000 0100 => 十进制4
        System.out.println("a和b与操作的结果是:" + (a & b));
    }

    @Test
    public void test2() {
        //java或操作:两个位只要有一个为1,那么结果就是1,否则就为0
        int a = 5;  //二进制表示0000 0101
        int b = 6;  //二进制表示0000 0110
        //故a|b => 0000 0111 => 十进制7
        System.out.println("a和b或操作的结果是:" + (a | b));
    }

    @Test
    public void test3() {
        //java非操作:一个二进制数中,0变1,1变0
        int a = 1;  //二进制表示00000001
        /*
        实际上int占32位: 00000000 00000000 00000000 00000001
        故取反后:        11111111 11111111 11111111 11111110
        但是计算机中的数是用补码表示的

        对于正数:原码 = 反码 = 补码
        对于负数:反码 = 将原码除符号位外取反
                 补码 = 将反码+1

        对于-2:
              原码:10000000 00000000 00000000 00000010
              反码:11111111 11111111 11111111 11111101
              补码:11111111 11111111 11111111 11111110

         可以发现对1取反后,与-2的补码一样,故1取反的值为-2
        */
        System.out.println("a做非操作的结果是:" + (~a));
    }

    @Test
    public void test4() {
        //java异或操作:两个位数相同则结果为0,不同则结果为1
        int a = 5;  //二进制表示0000 0101
        int b = 6;  //二进制表示0000 0110
        //故a^b => 0000 0011 => 十进制3
        System.out.println("a和b或操作的结果是:" + (a ^ b));
    }

    @Test
    public void test5() {
        //左移<< :左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0)
        int a = 2; //二进制为 0000 0010
        int b = a<<1; //则b为 0000 0100 十进制为4
        System.out.println("a向左移1位的结果是:" + b);
    }

    @Test
    public void test6() {
        //有符号右移 >> :将对应的数向右移动指定的位数。
        //使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1.
        int a = 2; //二进制为 0000 0010
        int b = a>>1; //则b为 0000 0001 十进制为1(最高位补0)
        System.out.println("a向右移1位的结果是:" + b);
    }

    @Test
    public void test7() {
        //无符号右移 >>> :将对应的数向右移动指定的位数,一律补0。
        int a = 2; //二进制为 0000 0010
        int b = a>>>1; //则b为 0000 0001 十进制为1(最高位补0)
        System.out.println("a向右移1位的结果是:" + b);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值