最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java位運算左移右移詳解:原碼反碼補(bǔ)碼與無符號右移的區(qū)別

 更新時間:2026年07月24日 09:29:48   作者:Masked5  
這篇文章詳細(xì)解釋了為什么沒有無符號左移運算符,并深入講解了原碼、反碼和補(bǔ)碼的區(qū)別,以及計算機(jī)為何使用補(bǔ)碼存儲數(shù)字,通過正負(fù)數(shù)示例,清晰展示了左移、右移和無符號右移的運算規(guī)則,還結(jié)合HashMap和ArrayList擴(kuò)容源碼,幫你輕松掌握位運算在實際開發(fā)中的應(yīng)用

為什么沒有無符號左移呢?

在計算機(jī)中,位運算中左移跟符號沒有關(guān)系的,因為最高位就是符號位。

例如8位的byte中最高位如果是1那就表示負(fù)數(shù)。如果是左移一位,那么最高位就會丟掉,最低位補(bǔ)0。

例如:1111 1111 << 1 就會變成 1111 1110。因此,不僅是Java,任何語言都沒有無符號左移運算符。

位操作操作的是原碼、反碼還是補(bǔ)碼?

原碼、反碼和補(bǔ)碼都是用來表示數(shù)字的編碼方式。

  • 原碼就是符號位加上真值的絕對值,即用第一位表示符號,其余位表示值。例如,如果是8位二進(jìn)制,那么+1的原碼為0000 0001,-1的原碼為1000 00011。
  • 反碼的表示方法是:正數(shù)的反碼是其本身;負(fù)數(shù)的反碼是在其原碼的基礎(chǔ)上,符號位不變,其余各個位取反。例如,+1的反碼為0000 0001,-1的反碼為1111 11101。
  • 補(bǔ)碼的表示方法是:正數(shù)的補(bǔ)碼就是其本身;負(fù)數(shù)的補(bǔ)碼是在其原碼的基礎(chǔ)上,符號位不變,其余各位取反,最后+1。例如,+1的補(bǔ)碼為0000 0001,-1的補(bǔ)碼為1111 11111。

計算機(jī)內(nèi)部使用補(bǔ)碼來存儲數(shù)字。這樣做可以簡化計算機(jī)底層電路設(shè)計,并且可以多表示一個最低數(shù)。例如,在8位二進(jìn)制中,使用原碼或反碼表示時范圍為[-127, +127],而使用補(bǔ)碼表示時范圍為[-128, +127]。

左移 <<

將一個數(shù)對應(yīng)的二進(jìn)制表示整體左移,不考慮符號位,左邊超出的部分舍棄,右邊補(bǔ)零。

正數(shù)

以數(shù)字10為例,二進(jìn)制表示為

00000000 00000000 00000000 00001010

第一位為符號位,0表示正數(shù),1表示負(fù)數(shù)。左移1位之后為

00000000 00000000 00000000 00010100

十進(jìn)制表示為20,相當(dāng)于乘以2。HashMap擴(kuò)容時將新容量增加為原來容量的兩倍,就是使用左移實現(xiàn)的。

負(fù)數(shù)

以負(fù)數(shù)-10為例,二進(jìn)制表示為

1111 1111 1111 1111 1111 1111 1111 0110

左移1位結(jié)果為

1111 1111 1111 1111 1111 1111 11110 1100

十進(jìn)制為-20,也是相當(dāng)于乘以2。

右移 >>

將一個數(shù)對應(yīng)的二進(jìn)制表示整體右移,考慮符號位,左邊的用原有符號位補(bǔ)充,右邊超出的部分舍棄。

正數(shù)

以10為例

00000000 00000000 00000000 00001010

右移1位

00000000 00000000 00000000 00000101

十進(jìn)制表示為5,相當(dāng)于除以2。ArrayList擴(kuò)容時將新容量增加為原來的1.5倍,就是使用右移實現(xiàn)的。

負(fù)數(shù)

以負(fù)數(shù)-10為例

1111 1111 1111 1111 1111 1111 1111 0110

右移1位

1111 1111 1111 1111 1111 1111 1111 1011

十進(jìn)制表示為-5,也是相當(dāng)于除以2。

無符號右移 >>>

將一個數(shù)的二進(jìn)制表示整體右移,不考慮符號位,左邊部分總是以0填充,右邊部分舍棄。

正數(shù)

和上面的右移一致。

負(fù)數(shù)

以-10為例

1111 1111 1111 1111 1111 1111 1111 0110

無符號右移1位

01111 1111 1111 1111 1111 1111 1111 1011

十進(jìn)制表示為2147483643。HashMap中在求一個數(shù)最接近的2的N次冪時使用到了無符號右移。

超過32位的左移會怎樣?

如果一個int型數(shù)字左移超過32位,如33位,相當(dāng)于左移1位,右移、無符號右移同理。

a << n == a << (n % 32)

位移是一個取模的過程

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JAVA IO的3種類型區(qū)別解析

    JAVA IO的3種類型區(qū)別解析

    這篇文章主要介紹了JAVA IO的3種類型解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • 在springboot項目中同時接收文件和多個參數(shù)的方法總結(jié)

    在springboot項目中同時接收文件和多個參數(shù)的方法總結(jié)

    在開發(fā)接口中,遇到了需要同時接收文件和多個參數(shù)的情況,可以有多種方式實現(xiàn)文件和參數(shù)的同時接收,文中給大家介紹了兩種實現(xiàn)方法,感興趣的同學(xué)跟著小編一起來看看吧
    2023-08-08
  • Java調(diào)用通義千問API的詳細(xì)步驟

    Java調(diào)用通義千問API的詳細(xì)步驟

    這篇文章主要介紹了在Java中接入通義千問API的步驟,包括獲取APIKey、添加依賴、配置模型和流式響應(yīng)等,并提供了響應(yīng)處理和高級功能實現(xiàn)示例,以及常見問題解決方案,需要的朋友可以參考下
    2026-03-03
  • MyBatis編寫一個簡單的SQL生成工具

    MyBatis編寫一個簡單的SQL生成工具

    MyBatis 是一個強(qiáng)大的數(shù)據(jù)持久化框架,它提供了一種半自動化的 ORM 實現(xiàn)方式,本文將為大家介紹如何使用MyBatis編寫一個簡單的SQL生成工具,需要的可以了解下
    2025-03-03
  • SpringBoot集成JWT無狀態(tài)身份認(rèn)證的方案詳解

    SpringBoot集成JWT無狀態(tài)身份認(rèn)證的方案詳解

    本文介紹了如何在SpringBoot項目中集成JWT實現(xiàn)無狀態(tài)身份認(rèn)證,JWT由Header、Payload和Signature三部分組成,通過添加JJWT依賴,創(chuàng)建JWT工具類和認(rèn)證攔截器,實現(xiàn)前后端的交互流程,需要注意安全性、性能優(yōu)化和常見問題,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • Java8如何構(gòu)建一個Stream示例詳解

    Java8如何構(gòu)建一個Stream示例詳解

    Java 8 是迄今為止在語義上改動上最大的一個平臺。下面這篇文章主要給大家介紹了關(guān)于Java8如何構(gòu)建一個Stream的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • 一篇文章帶你搞定JAVA注解

    一篇文章帶你搞定JAVA注解

    這篇文章主要介紹了詳解Java注解的實現(xiàn)與使用方法的相關(guān)資料,希望通過本文大家能夠理解掌握J(rèn)ava注解的知識,需要的朋友可以參考下
    2021-07-07
  • 詳解如何在Java中實現(xiàn)屏幕共享

    詳解如何在Java中實現(xiàn)屏幕共享

    在本文中,將為大家展示如何利用 JxBrowser 的功能,實現(xiàn)運行在不同電腦上的兩個 Java 應(yīng)用程序之間的屏幕共享,感興趣的小伙伴可以參考一下
    2024-10-10
  • Java編寫網(wǎng)上超市購物結(jié)算功能程序

    Java編寫網(wǎng)上超市購物結(jié)算功能程序

    這篇文章主要為大家詳細(xì)介紹了Java編寫網(wǎng)上超市購物結(jié)算功能程序的具體代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 詳解Java線程池的使用(7種創(chuàng)建方法)

    詳解Java線程池的使用(7種創(chuàng)建方法)

    這篇文章主要介紹了詳解Java線程池的使用(7種創(chuàng)建方法),線程池的創(chuàng)建?式總共包含7種,其中6種是通過Executors創(chuàng)建的,1種是通過ThreadPoolExecutor創(chuàng)建的,今天我們就來詳細(xì)說一下
    2023-03-03

最新評論

拉孜县| 秦皇岛市| 沂南县| 沅江市| 南投市| 仁寿县| 米脂县| 营山县| 金川县| 周宁县| 随州市| 兴业县| 汉川市| 武安市| 余干县| 宁陕县| 庆元县| 报价| 通渭县| 濉溪县| 若尔盖县| 宁波市| 大英县| 金溪县| 贵南县| 满城县| 贵州省| 城市| 象山县| 罗田县| 丹棱县| 嘉黎县| 霍邱县| 宁南县| 石屏县| 雷山县| 乌海市| 株洲市| 固始县| 公安县| 依兰县|