java基础之位运算符

java中具体的位运算符如下:

运算符

说明

<<

左移位,在低位处补0

>>

右移位,若为正数则高位补0,若为负数则高位补1

>>>

无符号右移位,无论正负都在高位补0

&

与(AND),对两个整型操作数中对应位执行布尔代数,两个位都为1时输出1,否则0。

|

或(OR),对两个整型操作数中对应位执行布尔代数,两个位都为0时输出0,否则1。

~

非(NOT),一元运算符。

^

异或(XOR),对两个整型操作数中对应位执行布尔代数,两个位相等0,不等1。

<<=

左移位赋值。

>>=

右移位赋值。

>>>=

无符号右移位赋值。

&=

按位与赋值。

|=

按位或赋值。

^=

按位异或赋值。


左移(<<)

程序代码:

public static void main(String[] args) {
    System.out.println(3<<2);
}

输出结果:

12

计算过程:

3转换成二进制在内存中的表示方法为:
这里写图片描述
开始左移(在低位处补0):
这里写图片描述
结果:
这里写图片描述

右移(>>)

程序代码:

public static void main(String[] args) {
    System.out.println(6>>2);
}

输出结果:

1

计算过程:

6转换成二进制在内存中的表示方法为:
这里写图片描述
开始右移(在高位处补0):
这里写图片描述
结果:
这里写图片描述

无符号右移(>>>)

程序代码:

public static void main(String[] args) {
    System.out.println(8>>>2);
}

输出结果:

2

计算过程省略(参照上面的右移,只不过无论正负都在最高位补0)

位与(&)

程序代码:

public static void main(String[] args) {
    System.out.println(7 & 5);
}

输出结果:

5

计算过程:

7的二进制表示形式:111
5的二进制表示形式:101

即:
   111
&101
0表示false,1表示true

所得结果为:101

位或(|)

程序代码:

public static void main(String[] args) {
    System.out.println(7 & 5);
}

输出结果:

7

计算过程:

7的二进制表示形式:111
5的二进制表示形式:101

即:
   111
&101
0表示false,1表示true

所得结果为:111

异或(^)

程序代码:

public static void main(String[] args) {
    System.out.println(7 ^ 5);
}

输出结果:

2

计算过程:

7的二进制表示形式:111
5的二进制表示形式:101

即:
   111
&101
0表示false,1表示true;两边相同则为false,两边不同则为true

所得结果为:010

反码(~)

反码其实就是取反。

程序代码:

public static void main(String[] args) {
    System.out.println(~6);
}

输出结果:

-7

6的二进制表示:
0000 0000 0000 0000 0000 0000 0000 0110

取反:
1111 1111 1111 1111 1111 1111 1111 1001

我们知道负数的二进制表示是正数的二进制取反加1,所以我们知道-6的变现形式减1,就得到了取反的效果。

即:-6-1=-7

总结

使用异或(^)可以实现简单的加密。

一个数异或同一个两次得到的还是原来的那个数。

程序代码:

public static void main(String[] args) {
    System.out.println(7^5^5);
}

输出结果:

7

最有效率的方式算出2乘以8等于几?

程序代码:

public static void main(String[] args) {
    System.out.println(2<<3);
}

两个整数变量值互换(不需要中间变量)

程序代码:

public static void main(String[] args) {
    int m = 5;
    int n = 7;

    n = n ^ m;
    m = n ^ m;

    n = n ^ m; // n ^ (n ^ m)


    System.out.println(m+"===="+n);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值