天天看点

位运算符(未完)

概要

  • ​​概述​​
  • ​​与运算应用​​
  • ​​应用​​
  • ​​和十六进制数进行位运算​​

概述

各个运算符的表示:&(与),|(或),^(异或),~(非/取反)
a b ~a a&b a|b a^b
1 1 1 1
1 1 1 1
1
  • 与:都为1结果为1
  • 或:有一个为1结果为1
  • 异或:二者不同时结果为1, 其中任意值与0异或值不变,两个相同的数异或为0

与运算应用

一个数与0相与为舍去, 与1相与为保留.

例1:1101 想要变为1100,则舍去后两位.

解:1101 & 1100 = 1100

例2:1111 想要变为1010,则将第2,4位舍去,将1,3位保留

解:1111 & 1010 = 1010

应用

  1. 判断该数为奇数还是偶数

    偶数 : (num & 1) == 0

    奇数 : (num & 1) == 1

和十六进制数进行位运算

看到有些算法求解中,某些二进制数与十六进制数进行位运算该如何理解呢?

​​

​一些算法中应用16进制为,其实他们的16进制转换为二进制位都是有规律的.并不是凭空出现的,大部分为了方便特殊二进制的表示.​

​​

举个栗子方便理解:

需求:一个数想取出二进制1 的偶数位

想要去偶数位,只需保留偶数位,舍去奇数位即可.

故将该数的偶数位和1相与,奇数位和0相与即可.

如 3427 的二进制为 : ‭1101 0110 0011‬

         &1010 1010 1010

         =1000 0010 0010

1000 0010 0010为所求的值.

只需和1010 1010 1010相与即可.

  1. 在JDK1.8之后支持二进制的输入.

    格式为:int bin = 0b1001_1111_0000;// 其中的下划线的应用是为了更好的阅读

    public class BinInputTest {

       public static void main(String[] args) {

       int bin = 0b1001_1111;

       System.out.println(bin);

       System.out.println(0b1111_1111);

       }

    }

    输出:

    159

    255 ↩︎