位操作-java

列表

操作描述
|位或运算
&位与运算
~按位补码
^按位异或运算
<<左位移
>>右位移
>>>无符号右位移

例子

位或运算

位或运算是二元运算,通过|表示,通过比较两个操作数对应的位,如果对应的位有一个是1,那么就是1,如果不是,那么就是0。

public class Example {

    public static void main(String[] args) {
        int number1 = 4, number2 = 8, result;
        result = number1 | number2;

        System.out.println(result);
    }
}

输出:12

00000100 = 4
00001000 = 8
------------
00001100 = 12

位与运算

位与运算是一个二元运算,通过&表示,通过比较两个操作数对应的位,如果对应的位都是1,那么是1,否则是0.

public class Example {

    public static void main(String[] args) {
        int number1 = 4, number2 = 8, result;
        result = number1 & number2;

        System.out.println(result);
    }
}

输出:0

00000100 = 4
00001000 = 8
-----------------
00000000 = 0

按位补码

按位补码是一元运算,通过~表示,将位数为1 转为0,位数为0转为1.

4 = 00000100

4的按位补码:
~ 00000100
----------------
  11111011 = 251

public class Example {

    public static void main(String[] args) {
        int number1 = 4, result;
        result = ~number1;
        System.out.println(result);
    }
}

输出:-5

为什么输出是-5,而不是251呢
因为编译器会显示251的按照2的按位补码,然后二进制 前面加上负号
例如

数值二进制按照2的按位补码
000000000-(11111111 + 1) = -00000000 = -0
100000001-(11111110 + 1) = -11111111 = -256
25111111011-(00000100+1) = -00000101

按位异或

按位异或是二元运算,通过^表示,通过比较两个操作数对应的位,如果对应的位值不相同,那么是1,如果对应的位相同,那么是0。

public class Example {

    public static void main(String[] args) {
        int number1 = 4, number2 = 8, result;
        result = number1^number2;
        System.out.println(result);
    }
}

输出:12

00000100 = 4
00001000 = 8
-----------------
00001100 = 12

左位移

<<运算符是左移特定的位数,用0补充到低位。

public class Example {

    public static void main(String[] args) {
        int number1 = 4, result1, result2;
        result1 = number1<<1;
        result2 = number1<<2;

        System.out.println("result1:" + result1);
        System.out.println("result2:" + result2);
    }
}

输出:8
输出:16
操作
00000100 << 100001000
00001000<<200100000

右位移

右位移运算是右移特定的位数

public class Example {

    public static void main(String[] args) {
        int number1 = 4, result1, result2,result3;
        result1 = number1>>1;
        result2 = number1>>2;
        result3 = number1>>3;

        System.out.println("result1:" + result1);
        System.out.println("result2:" + result2);
        System.out.println("result3:" + result3);
    }
}

输出:2
输出:1
输出:0

无符号右位移

无符号右位移运算是右移特定的位数,用0补充左边的位值。

public class Example {

    public static void main(String[] args) {
        int number1 = 5, number2 = -5;

        System.out.println(number1 >> 1);

        System.out.println(number1 >>> 1);

        System.out.println(number2 >> 1);
        
        System.out.println(number2 >>> 1);
    }
}

输出:2
输出:2
输出:-3
输出:2147483645
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值