位运算竟然是这样简单,让你精通位运算!

Posted 韶光不负

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了位运算竟然是这样简单,让你精通位运算!相关的知识,希望对你有一定的参考价值。

其实在基本的初学习者心中,当我们遇到一个算法题时我们喜欢使用的是“+,-,*,/”,很难联系到位运算。因为对没有掌握的人来说有一定的难度,下面就和小编一起来看看位运算到底都有什么!

目录

为什么要使用位运算?

 位运算的基本与使用(移动一次 :左移乘2  右移除2)

& 与运算:

 | 或运算:

^ 异或运算:

~取反运算:

 << 左移(箭头指那,向那移,移几位乘2的几次方)

>> 右移(箭头指那,向那移,移几位除2的几次方)

>>> 无符号右移

应用场景 

奇偶数判断(&运算)

二个数交换(^运算:异或二个相同的数0,0和任何数异或为本身)


为什么要使用位运算?

 首先我们都知道,电脑是看不懂我们的文字的,能看懂的是二进制码,所以我们通常使用的+,-,*,/都是开发者定义好了,我们自己用的,当一段代码实现某一个功能的时候,我们想要提高代码的时间复杂度(时间复杂度简单一点说就是时间)时,我们就可以考虑使用位运算。位运算是对操作数的二进制位进行运算,操作数与计算结果都是整数!

 位运算的基本与使用(移动一次 :左移乘2  右移除2

位运算符
位运算含义实例结果
<<有符号左移(有符号取二进制数最高位为符号位,0为正,1为负4<<18
>>有符号右移4>>12
>>>无符号右移4>>>21
&与运算4&20
|或运算4|26
^异或运算(二个相同的数进行异或时为0)4^26
~取反运算~4-5

& 与运算:

把二个要计算的数转化为二进制数,进行相与(&),只要一个为0,结果就为0,否则为1.

 

 int sum=0;
 sum=3&4;
 System.out.println(sum);

 | 或运算:

把二个要计算的数转化为二进制数,进行相或(|),只要一个为01,结果就为1,否则为0.

 

 int sum=0;
 sum=3|4;
 System.out.println(sum);

 

^ 异或运算:

任何相同的二进制数进行异或(^),结果为0,不同二进制异或(^),运算结果为1.

 int sum=0;
 sum=3^4;
 System.out.println(sum);
       

~取反运算:

把数转化为二进制,0变1,1变0.

转化完成后为二进制补码(正数转负数),

补码转化为源码

源码与补码的转换
源码转补码补码转源码
二进制源码取反,加1补码二进制减1,再取反

 int sum=0;
 sum=~4;
 System.out.println(sum);
       

 << 左移(箭头指那,向那移,移几位乘2的几次方)

把数转化为二进制数,按照指定的次数进行左移动、最高位丢弃,右边补齐0。

 

 int sum=0;
 sum=4<<2;
 System.out.println(sum);
        

 

>> 右移(箭头指那,向那移,移几位除2的几次方)

把数转化为二进制数,按照指定的次数进行右移动,最高位是0,左边补齐0。最高位是1,左补齐1。

 

 int sum=0;
 sum=4>>2;
 System.out.println(sum);
        

>>> 无符号右移

 把数转化为二进制数,不关正负,默认都是正数。按照指定的次数进行右移动,不管最高位是0还是1,左边补齐0。

 int sum=0;
 sum=4>>>2;
 System.out.println(sum);
        

应用场景 

奇偶数判断(&运算)

当我们把一个数转化为二进制时:最低位为1就是奇数,不然就是偶数:

原因:只有最低为是1,其他位都是2倍数。

奇偶判断:

方法就是与1&(与),和1相与(&),奇数就是1,偶数就是0.

 public static void main(String[] args) {
       //找出100内的奇数
        for (int i = 0; i <101 ; i++) {
            if(1 == (i & 1)){
                System.out.print(i+" ");
            }
        }
    }

二个数交换(^运算:异或二个相同的数0,0和任何数异或为本身

 public static void main(String[] args) {
      int x=5;
      int y=6;
      //异或二个相同的数0,0和任何数异或为本身
        x=x^y;
        //下面表达式y=y^x^y
        y=y^x;  //此时y=x;
        System.out.println(y);
        //下面表达式y=y^x^x
        x=x^y;
        System.out.println(x);
    }

以上是关于位运算竟然是这样简单,让你精通位运算!的主要内容,如果未能解决你的问题,请参考以下文章

java位移运算符有啥意义

位运算题目

按位运算符简单地翻转整数中的所有位?

OpenCV竟然可以这样学!成神之路终将不远

位运算

二进制位运算位移运算符