java<<、>>、>>>移位操作方法
<<,有符號左移位,將運算數(shù)的二進(jìn)制整體左移指定位數(shù),低位用0補(bǔ)齊。
int leftShift = 10;
System.out.println("十進(jìn)制:" + leftShift + ", 二進(jìn)制:" + Integer.toBinaryString(leftShift));
int newLeftShift = letfShift << 2;
System.out.println("左移2位后十進(jìn)制:" + newLeftShift + ", 左移2位后二進(jìn)制" + Integer.toBinaryString(newLeftShift)); //正整數(shù)x左移n位后的十進(jìn)制結(jié)果,x = x * 2^n
以上是正整數(shù),運算結(jié)果如下。

接下來看看將負(fù)數(shù)進(jìn)行左移2位操作是什么情況,運算結(jié)果如下。

為什么會-10的二進(jìn)制會出現(xiàn)這么多的1呢?仔細(xì)數(shù)一下剛好有32位。首先需要了解的是Java負(fù)數(shù)存儲是以補(bǔ)碼形式存儲的(補(bǔ)碼=反碼+1),10的二進(jìn)制是1010,它的反碼就是0101,再加1就是補(bǔ)碼0110。那為什么會多出來那么多1呢?這是因為int型在Java中占8個字節(jié),剛好32位,10原碼的高位全是0,它的反碼自然高位就變成了1。所以整體左移2位,低位以0補(bǔ)齊,最后的運算結(jié)果就是x = (|x| + 2^n)。
>>,有符號右移位,將運算數(shù)的二進(jìn)制整體右移指定位數(shù),整數(shù)高位用0補(bǔ)齊,負(fù)數(shù)高位用1補(bǔ)齊(保持負(fù)數(shù)符號不變)。
int rightShift = 10;
System.out.println("十進(jìn)制:" + rightShift + ", 二進(jìn)制:" + Integer.toBinaryString(rightShift));
int newRightShift = rightShift >> 2;
System.out.println("右移2位后十進(jìn)制:" + newRightShift + ", 右移2位后二進(jìn)制" + Integer.toBinaryString(newRightShift)); //右移n位后的運算數(shù)x十進(jìn)制結(jié)果,x = x / 2
以上是正整數(shù),運算結(jié)果如下。

接下來看看將負(fù)數(shù)進(jìn)行右移2位操作是什么情況,運算結(jié)果如下。

負(fù)數(shù)的有符號右移基本原理還是和左移相同,不同的是結(jié)果的計算,因為這是有符號的右移,一直右移最后的結(jié)果就會是-1。歸納起來就是,如果運算數(shù)是偶數(shù),那么它的運算結(jié)果就是 x = -(|x| / 2),如果運算數(shù)是奇數(shù),那么它的運算結(jié)果就是 x = -(|x| / 2) - 1。
>>>,無符號右移位,不管正數(shù)還是負(fù)數(shù),高位都用0補(bǔ)齊(忽略符號位)
先看正數(shù),正數(shù)的>>>無符號右移位和>>有符號右移位計算結(jié)果相同
int rightShift = 10;
System.out.println("十進(jìn)制:" + rightShift + ", 二進(jìn)制:" + Integer.toBinaryString(rightShift));
int newRightShift = rightShift >>> 2;
System.out.println("右移2位后十進(jìn)制:" + newRightShift + ", 右移2位后二進(jìn)制" + Integer.toBinaryString(newRightShift)); //右移n位后的云算數(shù)x十進(jìn)制結(jié)果,x = x / 2
以上是正整數(shù),運算結(jié)果如下。

接下來看負(fù)整數(shù),運算結(jié)果如下。

雖然無符號移位后的二進(jìn)制和有符號移位后的二進(jìn)制看起來相同的,但結(jié)果大相徑庭,記住有符號右移位操作,實際上是忽略符號的算術(shù)操作,即高位統(tǒng)一補(bǔ)0。
以上這篇java<<、>>、>>>移位操作方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
springcloud?如何解決微服務(wù)之間token傳遞問題
這篇文章主要介紹了springcloud?如何解決微服務(wù)之間token傳遞問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
Java實現(xiàn)二維數(shù)組和稀疏數(shù)組之間的轉(zhuǎn)換
本文主要介紹了Java 二維數(shù)組和稀疏數(shù)組轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06
IntelliJ IDEA使用教程從入門到上癮(2019圖文版)
這篇文章主要介紹了IntelliJ IDEA使用教程從入門到上癮(2019圖文版),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12
SpringBoot 配合 SpringSecurity 實現(xiàn)自動登錄功能的代碼
這篇文章主要介紹了SpringBoot 配合 SpringSecurity 實現(xiàn)自動登錄功能的代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
關(guān)于slf4j_log4j2源碼學(xué)習(xí)心得
這篇文章主要介紹了slf4j_log4j2源碼學(xué)習(xí)心得,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
SpringBoot如何讀取配置文件中的數(shù)據(jù)到map和list
這篇文章主要介紹了SpringBoot如何讀取配置文件中的數(shù)據(jù)到map和list,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
cookie+mybatis+servlet實現(xiàn)免登錄時長兩天半的整體流程
這篇文章主要介紹了cookie+mybatis+servlet實現(xiàn)免登錄時長兩天半,主要用到的技術(shù)有session、cookie、轉(zhuǎn)發(fā)、重定向、filter、和servlet,最重要的還是具體的來運用它們在前端頁面真正的搭建出一個應(yīng)用,通過這個練習(xí),對我們所學(xué)的web知識做一個整合,需要的朋友可以參考下2022-10-10

