位运算符学习(&、|、^、~等)速食版

目录

简介

位运算符包括

        按位与&

        按位或 |

        按位异或 ^

        按位取反 ~

        右移 >>

        左移 <<


 

 

简介

处理整型类型时,有一些运算符可以直接处理组成整数的各个位。这意味着可以使用掩码技术得到一个数中的各个位。

掩码:简单来说掩码就是一串二进制码。比如:00000101。就是个数字。掩码的作用是用来存储和操作“状态(State)”。
参考:什么是掩码? - 简书 (jianshu.com)

 

位运算符包括

  • &(“and”)按位与
  • |(“or”)按位或
  • ^(“xor”)按位异或
  • ~(“not”)取反
  • >> 右移
  • << 左移

 

 

 

按位与&

运算规则:将两边的数转换为二进制,然后进行比较运算,两个为真才为真,即两个为1才为1,其它都为0

1&1=1 , 1&0=0 , 0&1=0 , 0&0=0

简单测个代码: 

public class Test {
    public static void main(String[] args) {
        int a = 5&4;
        int b = 155&233;
        System.out.println(a);//4
        System.out.println(b);//137
    }
}

二进制原理

5:        0 0 0 0 0 1 0 1

4:        0 0 0 0 0 1 0 0

&       ----------------------

           0 0 0 0 0 1 0 0  = 4


155     1 0 0 1 1 0 1 1

233     1 1 1 0 1 0 0 1

&       ----------------------

           1 0 0 0 1 0 0 1 = 137

 

 

 

 

按位或 |

运算规则:将两边的数转换为二进制,然后进行比较运算,只要有一个为真那么结果就为真,即只要有1结果就为1

1|0 = 1 , 1|1 = 1 , 0|0 = 0 , 0|1 = 1

 简单测个代码: 

public class Test {
    public static void main(String[] args) {
        int c = 5|4;
        int d = 155|233;
        System.out.println(c);//5
        System.out.println(d);//251
    }
}

二进制原理

5:        0 0 0 0 0 1 0 1

4:        0 0 0 0 0 1 0 0

 |       ----------------------

           0 0 0 0 0 1 0 1  = 5


155     1 0 0 1 1 0 1 1

233     1 1 1 0 1 0 0 1

 |       ----------------------

           1 1 1 1 1 0 1 1 = 251

 

 

 

按位异或 ^

运算规则:将两边的数转换为二进制,然后进行比较运算,异或顾名思义,所以规则为:相同为0,不同为1

1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0

简单测个代码:

public class Test {
    public static void main(String[] args) {
        int e = 5^4;
        int f = 155^233;
        System.out.println(e);//1
        System.out.println(f);//114
    }
}

二进制原理

5:        0 0 0 0 0 1 0 1

4:        0 0 0 0 0 1 0 0

 ^       ----------------------

           0 0 0 0 0 0 0 1  = 1


155     1 0 0 1 1 0 1 1

233     1 1 1 0 1 0 0 1

 ^       ----------------------

           0 1 1 1 0 0 1 0 = 114

 

 

 

按位取反 ~

取反,是Java与C/C++使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数为1。

运算规则:取反就是1为0,0为1

正数取反的步骤:1.取该正数的补码   2.按位取反得到负数   3.取该负数的补码;

负数取反的步骤:1.取该负数的补码   2.按位取反得到正数   3.取该正数的补码;


具体怎么搞,看下面的:
1.正数的原码、反码、补码都相同

2.负数的原码:举例 -6,最左边1为符号位         1 0 0 0 0 1 1 0
3.负数的反码:原码除符号位外按位取反            1 1 1 1 1 0 0 1 

4.负数的补码:该负数的反码+1                          1 1 1 1 1 0 1 0


到此规则已经一目了然,更多请参考:(116条消息) 为什么~6 = -7_Varpb的博客-CSDN博客_6取反运算后为什么是负7

简单测个代码 

public class Test {
    public static void main(String[] args) {
        int g = ~5;
        int h = ~155;
        System.out.println(g);//-6
        System.out.println(h);//-156
    }
}

二进制原理

5:        0 0 0 0 0 1 0 1
~       ----------------------

           1 1 1 1 1 0 1 0        这是得到的负数,再对除符号位外按位取反、+1

           1 0 0 0 0 1 1 0        = -6
   
 

155     0 0 0 0 0 0 0 0    1 0 0 1 1 0 1 1
~       ------------------------------------------
           1 1 1 1 1 1 1 1    0 1 1 0 0 1 0 0    
           1 0 0 0 0 0 0 0    1 0 0 1 1 1 0 0    =  -156



负数取反:

-6        1 0 0 0 0 1 1 0        这是-6的原码

           1 1 1 1 1 0 0 1        -6的反码

           1 1 1 1 1 0 1 0        -6的补码

~       ----------------------

           0 0 0 0 0 1 0 1        按位取反得到正数

           0 0 0 0 0 1 0 1        正数的补码和原码一样

 

 

 

右移 >>

顾名思义就是移位,先转换成二进制再往右移位

简单测个代码 

public class Test {
    public static void main(String[] args) {
        int i = 13;
        System.out.println(i>>2);//3
    }
}

 二进制原理

13:        0 0 0 0  1 1 0 1

>>2     -----------------------  

             0 0 0 0  0 0 1 1   =  3

右移了几位就等同于除以了("/")几次2 

 

 

 

左移 <<

即转换成二进制后再往左移位

左移了几位就等同于乘了几次2 

简单测个代码 

public class Test {
    public static void main(String[] args) {
        int j = 9;
        System.out.println(j<<3);//72
    }
}

 

 

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值