Java位運算符詳解

在Java中,位運算符是對二進位位進行操作的運算符。位運算符可用於位操作,位操作可以用於優化計算機程序的處理速度。

一、位運算符的種類

Java中共有6個位運算符:

  • & 按位與:對兩個數的二進位進行按位與操作,只有都為1時,結果才為1。
  • | 按位或:對兩個數的二進位進行按位或操作,只要有一個為1時,結果就為1。
  • ^ 按位異或:對兩個數的二進位進行按位異或操作,不同為1,相同為0。
  • ~ 按位取反:對一個數的二進位進行按位取反,0變為1,1變為0。
  • > 右移:將一個數的二進位按照指定位數向右移動,超出部分捨棄,空位以符號位補位。
  • << 左移:將一個數的二進位按照指定位數向左移動,超出部分捨棄,空位補0。

二、位運算符的作用

位運算符常用於以下場景:

  1. 將整數轉換為二進位或十六進位
  2.     int num = 10;
        //輸出二進位形式
        System.out.println(Integer.toBinaryString(num));
        //輸出十六進位形式
        System.out.println(Integer.toHexString(num));
        
  3. 對整數進行快速除法或乘法計算
  4.     //等同於num*2^3
        int result = num << 3;
        //等同於num/2^3
        int result = num >> 3;
        
  5. 對數字的某些位進行操作
  6.     //將num的第2位設置為1
        int result = num | 0b10;
        //將num的第4位設為0
        int result = num & ~0b1000;
        

三、注意事項

位運算符操作的對象必須是整型(byte、short、int、long),不能用於浮點型。

對於<>運算,若左操作數是int類型,則移動1~31位的結果為int類型;若左操作數是long類型,則移動1~63位的結果為long類型。

對於>>>運算(無符號位移運算),一律將空缺處補0,即使最左邊一位是1也不例外(因此Java不支持無符號整數類型)。

四、實例演示

public class BitwiseOperatorDemo {
    public static void main(String[] args) {
        int a = 60; /* 60 = 0011 1100 */
        int b = 13; /* 13 = 0000 1101 */
        int c = 0;
        c = a & b; /* 12 = 0000 1100 */
        System.out.println("a & b = " + c );
        c = a | b; /* 61 = 0011 1101 */
        System.out.println("a | b = " + c );
        c = a ^ b; /* 49 = 0011 0001 */
        System.out.println("a ^ b = " + c );
        c = ~a; /*-61 = 1100 0011 */
        System.out.println("~a = " + c );
        c = a << 2; /* 240 = 1111 0000 */
        System.out.println("a <> 2; /* 15 = 1111 */
        System.out.println("a >> 2  = " + c );
        c = a >>> 2; /* 15 = 0000 1111 */
        System.out.println("a >>> 2 = " + c );
    }
}

原創文章,作者:PNAH,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/132814.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
PNAH的頭像PNAH
上一篇 2024-10-03 23:54
下一篇 2024-10-03 23:54

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論