日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java 移位运算详解

發(fā)布時(shí)間:2024/8/1 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 移位运算详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

個(gè)人網(wǎng)站:生命不息 折騰不止

1、左移運(yùn)算符:<<

先隨便定義一個(gè)int類型的數(shù)int,十進(jìn)制的value = 733183670,轉(zhuǎn)換成二進(jìn)制在計(jì)算機(jī)中的表示如下:

value << 1,左移1位

左移1位后換算成十進(jìn)制的值為:1466367340,剛好是733183670的兩倍, 有些人在乘2操作時(shí)喜歡用左移運(yùn)算符來(lái)替代。

value << 8,左移8位看一下:

左移8位后變成了十進(jìn)制的值為:-1283541504,移動(dòng)8位后,由于首位變成了1,也就是說(shuō)成了負(fù)數(shù),在使用中要考慮變成負(fù)數(shù)的情況。

根據(jù)這個(gè)規(guī)則,左移32位后,右邊補(bǔ)上32個(gè)0值是不是就變成了十進(jìn)制的0了?答案是NO,當(dāng)int類型進(jìn)行左移操作時(shí),左移位數(shù)大于等于32位操作時(shí),會(huì)先求余(%)后再進(jìn)行左移操作。也就是說(shuō)左移32位相當(dāng)于不進(jìn)行移位操作,左移40位相當(dāng)于左移8位(40%32=8)。當(dāng)long類型進(jìn)行左移操作時(shí),long類型在二進(jìn)制中的體現(xiàn)是64位的,因此求余操作的基數(shù)也變成了64,也就是說(shuō)左移64位相當(dāng)于沒(méi)有移位,左移72位相當(dāng)于左移8位(72%64=8)
注意:其它幾種整形byte,short移位前會(huì)先轉(zhuǎn)換為int類型(32位)再進(jìn)行移位。

綜上所述:左移 << 其實(shí)很簡(jiǎn)單,也就是說(shuō)丟棄左邊指定位數(shù),右邊補(bǔ)0。

2、右移運(yùn)算符:>>

還是這個(gè)數(shù):733183670

value >> 1,右移1位

右移1位后換算成十進(jìn)制的值為:366591835,剛好是733183670的1半, 有些人在除2操作時(shí)喜歡用右移運(yùn)算符來(lái)替代

value >> 8,右移8位看一下

和左移一樣,int類型移位大于等于32位時(shí),long類型大于等于64位時(shí),會(huì)先做求余處理再位移處理,byte,short移位前會(huì)先轉(zhuǎn)換為int類型(32位)再進(jìn)行移位。以上是正數(shù)的位移,我們?cè)賮?lái)看看負(fù)數(shù)的右移運(yùn)算,如圖,負(fù)數(shù)intValue:-733183670的二進(jìn)制表現(xiàn)如下圖:

右移8位,intValue >> 8

綜上所述:右移運(yùn)算符>>的運(yùn)算規(guī)則也很簡(jiǎn)單,丟棄右邊指定位數(shù),左邊補(bǔ)上符號(hào)位。

3、無(wú)符號(hào)右移運(yùn)算符:>>>

無(wú)符號(hào)右移運(yùn)算符>>>和右移運(yùn)算符>>是一樣的,只不過(guò)右移時(shí)左邊是補(bǔ)上符號(hào)位,而無(wú)符號(hào)右移運(yùn)算符是補(bǔ)上0,也就是說(shuō),對(duì)于正數(shù)移位來(lái)說(shuō)等同于:>>,負(fù)數(shù)通過(guò)此移位運(yùn)算符能移位成正數(shù)。以-733183670>>>8為例來(lái)畫一下圖

無(wú)符號(hào)右移運(yùn)算符>>的運(yùn)算規(guī)則也很簡(jiǎn)單,丟棄右邊指定位數(shù),左邊補(bǔ)上0。

4. 快速算出移位運(yùn)算符結(jié)果的方法(只適用小數(shù)值):

在不大于自身數(shù)值類型最大位數(shù)的移位時(shí),一個(gè)數(shù)左移n位,就是將這個(gè)數(shù)乘以2的n次冪;一個(gè)數(shù)右移n位,就是將這個(gè)數(shù)除2的n次冪,然后取整。
比如int32位的(64位也是同樣方法):

7 >> 1 = 7/2 取整為3 7 << 1 = 7*2 為14

如果移動(dòng)位數(shù)超過(guò)了32位怎么辦?把移位數(shù)和32取余數(shù)得到的數(shù)字套用即可:

如 9 >> 67
1、先67對(duì)32取余,結(jié)果是3
2、然后9/8 得到結(jié)果為1

總結(jié)

以上是生活随笔為你收集整理的Java 移位运算详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。