欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文讓你徹底學會Java左移、右移操作

 更新時間:2025年02月21日 11:12:17   作者:憑君語未可  
這篇文章主要介紹了了Java中的位運算符,包括左移(<<)、右移(>>)和無符號右移(>>>),左移將數(shù)字的二進制位向左移動,相當于乘以2的n次方;右移將數(shù)字的二進制位向右移動,保留符號位,相當于除以2的n次方,文中介紹的非常詳細,需要的朋友可以參考下

在Java中,左移 ( <<) 和右移 ( >>) 是位運算符,用于對二進制數(shù)進行移位操作。移位操作會對數(shù)字的位模式進行直接操作。

1. 左移運算符(<<)

功能:

  • 左移操作會將一個數(shù)字的二進制位向左移動指定的位數(shù),右邊用 0 填充。
  • 每向左移動一位,相當于該數(shù)字乘以2(但不是嚴格意義上的乘法,可能會導致溢出)。

語法:

result = value << n;
  • value 是要操作的數(shù)字。
  • n 是移動的位數(shù)。

特點:

  • 左移后會擴大數(shù)字的值(如果沒有溢出的話)。
  • 右邊補0。
  • 如果是負數(shù),二進制會以補碼形式參與計算。

示例:

int a = 5; // 二進制:00000000 00000000 00000000 00000101
int result = a << 2; // 左移2位:00000000 00000000 00000000 00010100(20)
System.out.println(result); // 輸出:20

2. 右移運算符(>>)

功能:

  • 右移操作會將一個數(shù)字的二進制位向右移動指定的位數(shù)。
  • 符號位擴展:如果是正數(shù),高位用0填充;如果是負數(shù),高位用1填充(即符號位保持不變)。
  • 每向右移動一位,相當于該數(shù)字除以2(向下取整)。

語法:

result = value >> n;
  • value 是要操作的數(shù)字。
  • n 是移動的位數(shù)。

特點:

  • 對于正數(shù),右移后高位用0填充。
  • 對于負數(shù),右移后高位用1填充(符號位擴展)。
  • 適合處理帶符號的數(shù)字。

示例:

int a = 20; // 二進制:00000000 00000000 00000000 00010100
int result = a >> 2; // 右移2位:00000000 00000000 00000000 00000101(5)
System.out.println(result); // 輸出:5

int b = -20; // 二進制:11111111 11111111 11111111 11101100(補碼表示)
int result2 = b >> 2; // 右移2位:11111111 11111111 11111111 11111011(-5)
System.out.println(result2); // 輸出:-5

3. 無符號右移運算符(>>>)

除了 >>,Java 還提供了 無符號右移運算符 >>>

  • 無論正數(shù)還是負數(shù),高位都用 0 填充。
  • 通常用于操作無符號數(shù)據(jù)。

示例:

int a = -20; // 二進制:11111111 11111111 11111111 11101100(補碼表示)
int result = a >>> 2; // 無符號右移2位:00111111 11111111 11111111 11111011
System.out.println(result); // 輸出:1073741819

總結

操作符名稱功能
<<左移二進制向左移,右邊補0,相當于乘以2的n次方(如果不溢出)。
>>符號右移二進制向右移,保留符號位,高位補符號位(正數(shù)補0,負數(shù)補1),相當于除以2的n次方。
>>>無符號右移二進制向右移,高位總是補0,不考慮符號位。

擴展:i <<= j

  • 在Java中,i <<= j 是一個復合運算符,它等價于 i = i << j,表示將 i 的二進制位向左移動 j 位,然后將結果賦值給 i。即將 i 左移j位,相當于 i 乘以 2 的 j 次方。

運算過程

  • i 的二進制形式會向左移動 j 位。
  • 移位后,低位用 0 補充,高位可能會溢出(超出當前數(shù)據(jù)類型范圍的部分會被丟棄)。
  • 最終結果存回變量 i

示例

示例1:對正數(shù)進行左移

public class Main {
    public static void main(String[] args) {
        int i = 5; // 二進制:00000000 00000000 00000000 00000101
        int j = 2;

        i <<= j; // 等價于 i = i << j
        // 左移2位:00000000 00000000 00000000 00010100 (20)

        System.out.println(i); // 輸出:20
    }
}

示例2:對負數(shù)進行左移

public class Main {
    public static void main(String[] args) {
        int i = -5; // 二進制(補碼):11111111 11111111 11111111 11111011
        int j = 2;

        i <<= j; // 等價于 i = i << j
        // 左移2位:11111111 11111111 11111111 11101100 (-20)

        System.out.println(i); // 輸出:-20
    }
}

示例3:可能的溢出問題

public class Main {
    public static void main(String[] args) {
        int i = 1073741824; // 二進制:01000000 00000000 00000000 00000000
        int j = 1;

        i <<= j; // 左移1位:10000000 00000000 00000000 00000000
        // 超過32位,結果變?yōu)樨摂?shù)(溢出)
        
        System.out.println(i); // 輸出:-2147483648
    }
}

注意點

  • 左移等價于乘以2的冪

    • 每向左移1位,相當于乘以2
    • 例如:5 <<= 1 等價于 5 * 2 = 10,5 <<= 2 等價于 5 * 4 = 20。
    • 注意,左移不會檢查溢出問題,可能導致負數(shù)或錯誤的結果。
  • 溢出問題

    • 移位可能會導致高位被截斷,特別是當操作數(shù)接近數(shù)據(jù)類型的最大值時。
  • 適用數(shù)據(jù)類型

    • 左移操作支持整型和長整型(int 和 long)。
    • 如果操作的類型小于 int(比如 byte 或 short),會被提升為 int 再執(zhí)行移位運算。

總結 

到此這篇關于Java左移、右移操作的文章就介紹到這了,更多相關Java左移、右移操作內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 一文秒懂idea的git插件跟翻譯插件

    一文秒懂idea的git插件跟翻譯插件

    idea之類的開發(fā)軟件真的超級多的插件,今天給大家分享idea的git插件跟翻譯插件,感興趣的朋友跟隨小編一起看看吧
    2021-04-04
  • Kafka?日志存儲實現(xiàn)過程

    Kafka?日志存儲實現(xiàn)過程

    這篇文章主要為大家介紹了Kafka?日志存儲的實現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Spring Boot 3.x 集成 Eureka Server/Client的詳細過程

    Spring Boot 3.x 集成 Eureka Server/Cl

    隨著SpringBoot 3.x版本的開發(fā)嘗試,本文記錄了在集成Eureka Server/Client時所遇到的問題和解決方案,文中詳細介紹了搭建服務、配置文件和測試步驟,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • Java 高并發(fā)一:前言

    Java 高并發(fā)一:前言

    本系列基于煉數(shù)成金課程,為了更好的學習,做了系列的記錄。 本文主要介紹 1.高并發(fā)的概念,為以后系列知識做鋪墊。 2.兩個重要的定理
    2016-09-09
  • JAVA內部類示例詳解及練習

    JAVA內部類示例詳解及練習

    這篇文章主要為大家詳細介紹了Java的內部類,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 關于Spring中@Value注解使用和源碼分析

    關于Spring中@Value注解使用和源碼分析

    通過深入分析@Value注解的使用和源碼,本文詳細解釋了Spring如何解析@Value注解并為屬性賦值,首先,Spring會解析并收集所有被@Value注解修飾的屬性,這一過程依賴于AutowiredAnnotationBeanPostProcessor類
    2024-11-11
  • Java實現(xiàn)簡易購物系統(tǒng)

    Java實現(xiàn)簡易購物系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡易購物系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 下一代Eclipse 步入云端

    下一代Eclipse 步入云端

    代號Che的下一代Eclipse IDE將運行在云端,可以在任何機器上打開瀏覽器寫代碼。項目的建立、編輯、debug、部署可以都在一個倉庫中進行,需要的朋友可以參考下
    2015-12-12
  • java實現(xiàn)發(fā)送email小案例

    java實現(xiàn)發(fā)送email小案例

    這篇文章主要為大家詳細介紹了java實現(xiàn)發(fā)送email小案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • java接口使用默認方法的講解

    java接口使用默認方法的講解

    在本篇文章里小編給大家整理了一篇關于java接口使用默認方法的講解內容,有需要的朋友們可以學習下。
    2021-04-04

最新評論