天天看點

位運算符(未完)

概要

  • ​​概述​​
  • ​​與運算應用​​
  • ​​應用​​
  • ​​和十六進制數進行位運算​​

概述

各個運算符的表示:&(與),|(或),^(異或),~(非/取反)
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 ↩︎