java中的位運算

2021-08-15 19:23:28 字數 1695 閱讀 9951

位運算因為是直接二進位制位操作,所以執行很快,在一些jdk原始碼裡面看得見,一般開發web用不到,現在我們來討論下位運算

以下為了方便顯示,使用 八位二進位制表示

說明一下:

負數在計算機中的存在形式

以補碼的形式存在

負數轉二進位制:

1.寫出x的絕對值的二進位制值

2.對這個二進位制值取反

3.對取反後的數加1

1. ~ 按位取反(單目運算子)

概念:操作乙個二進位制數,是1就變成0,0就變成1

例:~10 => ~00001010 => 11110101 => -11

二進位制表示的最高位表示正負,1是負,0是正,11110101 轉十進位制就是 -1 然後取反加負號,就是 11110100 取反,就是 -00001011 就是 - 11

2. ^  按位異或(雙目運算子)

概念:操作兩個二進位制數,相同的位相異就是1,相同就是0

例: 10^5 => 00001010 ^ 00000101 = > 000001111 =>15

3. & 按位與(雙目運算子)

概念:操作兩個二進位制數,相同的位只要有乙個是0,那麼該位運算後的結果就是0

例:10&5 =>00001010 & 00000101 => 00000000 => 0

4. | 按位或(雙目運算子)

概念:操作兩個二進位制數,相同的位只要有乙個是1,那麼該位就是1

例:10|5 => 00001010 | 00000101 => 00001111 => 15

eclipse執行控制台截圖如下

順便說一下位運算在進製轉換中的應用

例如將八位二進位制的(可以理解成byte型別)數轉成兩位16進製制的數

// 首先初始化乙個字元陣列,用來存放每個16個字元

private static final char hexdigits = ;

public static void main(string args)
解釋一下:因為 b是八位二進位制的,比如說 20 ,二進位制就是 00010100 轉成十六進製制,因為乙個十六進製制的數可以看作是4位二進位制的,從左往右的數就是相當於十進位制裡面的 百位,十位,個位,將二十直接右移四位,就是 只有前面的四位了,其他的補零,就是 00000001 ,然後按位要做的就是計算 00000001的值,其實這裡也可以不和 0xf(00001111)按位與,直接輸出也就是十進位制的值,但是這只是恰巧,最好還是與一下,然後轉成十六進製制的第一位就是1,然後再直接(20(00010100)不移位)和0xf(00001111)按位與,按位與可以除去前面的1,只要後面的四位,結果就是,00000100 就是4,所以十進位制的20轉十六進製制就是 14.執行如下圖所示

再例如,20轉八進位制

public static void main(string args)
執行結果如圖:

Java 中的位運算

移位運算子 包括 右移 左移 無符號右移 例子 5 3 1 1111 1111 1111 1111 1111 1111 1111 1011 1111 1111 1111 1111 1111 1111 1111 1111 其結果與 math.floor double 5 2 2 2 完全相同。5 3 ...

Java 中的位運算

計算機中的原碼 反碼和補碼 移位運算子 包括 右移 左移 無符號右移 例子 5 3 1 1111 1111 1111 1111 1111 1111 1111 1011 1111 1111 1111 1111 1111 1111 1111 1111 其結果與 math.floor double 5 2...

Java 中的位運算

移位運算子 包括 右移 左移 無符號右移 例子 5 3 1 1111 1111 1111 1111 1111 1111 1111 1011 1111 1111 1111 1111 1111 1111 1111 1111 其結果與 math.floor double 5 2 2 2 完全相同。5 3 ...