Java位运算符中的“&”,“|”,“~”,“^”

转载博客地址link

位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。下面详细介绍每个位运算符。

与运算符

与运算符用符号“&”表示,其使用规律如下:
两个操作数中位都为1,结果才为1,否则结果为0。例如下面的程序段:

public class data13 {
    public static void main(String[] args) {
        int a = 129;
        int b = 128;
        System.out.println("a 和b 与的结果是:" + (a & b));
    }
}

运行结果
a与b的结果是:128
下面分析这个程序:
“a”的值是129,转换成二进制就是10000001,而“b”的值是128,转换成二进制就是10000000。根据与运算符的运算规律,只有两个位都是1,结果才是1,可以知道结果就是10000000,即128。

或运算符

或运算符用符号“|”表示,其运算规律如下:
两个位只要有一个为1,那么结果就是1,否则就为0。例如下面的程序段:

public class data14 {
    public static void main(String[] args) {
        int a = 129;
        int b = 128;
        System.out.println("a 和b 或的结果是:" + (a | b));
    }
}

运行结果
a或b的结果是:129
下面分析这个程序段:
“a”的值是129,转换成二进制就是10000001,而“b”的值是128,转换成二进制就是10000000,根据或运算符的运算规律,只有两个位有一个是1,结果才是1,可以知道结果就是10000001,即129。

非运算符

非运算符用符号“~”表示,其运算规律如下:
如果位为0,结果是1,如果位为1,结果是0。例如下面的程序段:

public class data15 {
    public static void main(String[] args) {
        int a = 2;
        System.out.println("a 非的结果是:" + (~a));
    }
}

运行结果
非a的结果是:-3
在计算机内部,有符号数有三种表示法:原码、反码和补码。

原码

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制
[+1]原 = 0000 0001
[-1]原 = 1000 0001
因为第一位是符号位, 所以若是8位二进制数,其取值范围就是:
[1111 1111 , 0111 1111]
即[-127 , 127]
原码是人脑最容易理解和计算的表示方式。

反码

反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
[+1] = [ 00000001 ]原码 = [ 00000001 ]反码;
[-1] = [ 10000001 ]原码 = [ 11111110 ]反码;
可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算

补码

补码是计算机中用来表示负数,使得负数能够使用加法器参与加法运算的一种码。
正数的补码即为自己,负数的补码为符号位不变,其余逐位求反再加1。
下面分析这个程序段:
“a”的值是2,转换成二进制就是00000010,非运算符运算后就是11111101。

异或运算符

异或运算符是用符号“^”表示的,其运算规律如下:
两个操作数的位中,相同则结果为0,不同则结果为1。例如下面的程序段:

public class data16 {
    public static void main(String[] args) {
        int a = 15;
        int b = 2;
        System.out.println("a 与 b 异或的结果是:" + (a ^ b));
    }
}

运行结果
a异或b的结果是:13
分析上面的程序段:
“a”的值是15,转换成二进制为1111,而“b”的值是2,转换成二进制为0010,根据异或的运算规律,可以得出其结果为1101 即13。

菜鸟教程讲解的蛮详细:链接地址link

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值