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

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

偶尔看源码,经常遇见这些运算符,记录下这些运算符的使用,强化下记忆。
位运算符主要用于二进制,因此下面都会将数字转为二进制来举例。

与运算符(&)

“&”运算符是当二进制相同位都为1时,则为1,存在为0的,则为0
以 *3&5* 为例,转换为二进制为:
    3    --->      00000000  00000000  00000000  00000011
    5    --->      00000000  00000000  00000000  00000101
   “&”后的结果为     00000000  00000000  00000000  00000001   =  1

或运算符(|)

“|”运算符是当二进制相同位有一个1时,则为1
以 *3|5* 为例,转换为二进制为:
    3    --->      00000000  00000000  00000000  00000011
    5    --->      00000000  00000000  00000000  00000101
   “|”后的结果为     00000000  00000000  00000000  00000111   =  7

异或运算符(^)

“^”运算符是当二进制向相同位的值相同时,则为0,否则为1
以 *3^5* 为例,转换为二进制为:
3    --->      00000000  00000000  00000000  00000011
5    --->      00000000  00000000  00000000  00000101
“^”后的结果为    00000000  00000000  00000000  00000110   =  6

非运算符(~)

“~”运算符是将二进制中1替换为0,0替换为1即可
以~3为例
     3    --->      00000000  00000000  00000000  00000011
     ~3   --->      11111111 11111111 11111111 11111100
二进制的高位为1,所以是负数,在Java中,所有数据的表示方法都是以补码的形式表示,正数的原码等于补码,
负数的补码是其绝对值的原码取反,末尾再加1,因此我们需要将补码转换为原码:
           先减1:
             11111111 11111111 11111111 11111011
           再取反:
           	 00000000  00000000  00000000  00000100
           得出值为4, 则 
              ~3 = -4

附: 二进制快速运算方法

二进制的每一位的1都是对应了2的次方,从右到左,由0次方开始递增,计算时可以用这个规律,如:
       00000000  00000000  00000000  00001011
       采用该算法计算规则为: 2^0 + 2^1 + 2^3 = 11 (此处^代表次方,没找到怎么打出来.....)
       
 数字如何快速转换为二进制,直接对数字一直除2,直到商为0,将每次的余数倒排,就能得到相应的二进制,如:
      将16转换为2进制:
           16/2 = 8     余数为   0
           8/2 = 4      余数为   0
           4/2 = 2      余数为   0
           2/2 = 1      余数为   0
           1/2 = 0      余数为   1     次数商已经为0了,直接停止 
        倒排余数得到 10000  
        此法为短除法,可以用于其他进制的转换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值