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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java移位运算符详解_java移位运算符详解

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

Java移位運(yùn)算符不外乎就這三種:<>(帶符號(hào)右移)和>>>(無(wú)符號(hào)右移)。

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

左移運(yùn)算符<

1)它的通用格式如下所示:

value << num

num 指定要移位值value 移動(dòng)的位數(shù)。

左移的規(guī)則只記住一點(diǎn):丟棄最高位(符號(hào)位同樣丟棄),0補(bǔ)最低位

如果移動(dòng)的位數(shù)超過(guò)了該類型的最大位數(shù),那么編譯器會(huì)對(duì)移動(dòng)的位數(shù)取模。如對(duì)int型移動(dòng)33位,實(shí)際上只移動(dòng)了332=1位。

2)運(yùn)算規(guī)則

按二進(jìn)制形式把所有的數(shù)字向左移動(dòng)對(duì)應(yīng)的位數(shù),高位移出(舍棄),低位的空位補(bǔ)零。

當(dāng)左移的運(yùn)算數(shù)是int 類型時(shí),每移動(dòng)1位它的第31位就要被移出并且丟棄;

當(dāng)左移的運(yùn)算數(shù)是long 類型時(shí),每移動(dòng)1位它的第63位就要被移出并且丟棄。

當(dāng)左移的運(yùn)算數(shù)是byte 和short類型時(shí),將自動(dòng)把這些類型擴(kuò)大為 int 型。

3)數(shù)學(xué)意義

在數(shù)字沒(méi)有溢出的前提下,對(duì)于正數(shù)和負(fù)數(shù),左移一位都相當(dāng)于乘以2的1次方,左移n位就相當(dāng)于乘以2的n次方

4)計(jì)算過(guò)程:

例如:3 <<2(3為int型)

1)把3轉(zhuǎn)換為二進(jìn)制數(shù)字0000 0000 0000 0000 0000 0000 0000 0011,

2)把該數(shù)字高位(左側(cè))的兩個(gè)零移出,其他的數(shù)字都朝左平移2位

3)在低位(右側(cè))的兩個(gè)空位補(bǔ)零。則得到的最終結(jié)果是0000 0000 0000 0000 0000 0000 0000 1100,

轉(zhuǎn)換為十進(jìn)制是12。

移動(dòng)的位數(shù)超過(guò)了該類型的最大位數(shù),

如果移進(jìn)高階位(31或63位),那么該值將變?yōu)樨?fù)值。下面的程序說(shuō)明了這一點(diǎn):

// Left shifting as a quick way to multiply by 2.

public class MultByTwo {

public static void main(String args[]) {

int i;

int num = 0xFFFFFFE;

for(i=0; i<4; i ) {

num = num << 1;

System.out.println(num);

}

}

}

該程序的輸出如下所示:

536870908

1073741816

2147483632

-32

注:n位二進(jìn)制,最高位為符號(hào)位,因此表示的數(shù)值范圍-2^(n-1)~2^(n-1) -1,所以模為2^(n-1)。

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

右移運(yùn)算符<

1)它的通用格式如下所示:

value >> num

num 指定要移位值value 移動(dòng)的位數(shù)。

右移的規(guī)則只記住一點(diǎn):符號(hào)位不變,左邊補(bǔ)上符號(hào)位

2)運(yùn)算規(guī)則:

按二進(jìn)制形式把所有的數(shù)字向右移動(dòng)對(duì)應(yīng)的位數(shù),低位移出(舍棄),高位的空位補(bǔ)符號(hào)位,即正數(shù)補(bǔ)零,負(fù)數(shù)補(bǔ)1

當(dāng)右移的運(yùn)算數(shù)是byte 和short類型時(shí),將自動(dòng)把這些類型擴(kuò)大為 int?型。

例如,如果要移走的值為負(fù)數(shù),每一次右移都在左邊補(bǔ)1,如果要移走的值為正數(shù),每一次右移都在左邊補(bǔ)0,這叫做符號(hào)位擴(kuò)展(保留符號(hào)位)(sign extension ),在進(jìn)行右移

操作時(shí)用來(lái)保持負(fù)數(shù)的符號(hào)。

3)數(shù)學(xué)意義

右移一位相當(dāng)于除2,右移n位相當(dāng)于除以2的n次方。

4)計(jì)算過(guò)程

11 >>2(11為int型)

1)11的二進(jìn)制形式為:0000 0000 0000 0000 0000 0000 0000 1011

2)把低位的最后兩個(gè)數(shù)字移出,因?yàn)樵摂?shù)字是正數(shù),所以在高位補(bǔ)零。

3)最終結(jié)果是0000 0000 0000 0000 0000 0000 0000 0010。

轉(zhuǎn)換為十進(jìn)制是3。

35 >> 2(35為int型)

35轉(zhuǎn)換為二進(jìn)制:0000 0000 0000 0000 0000 0000 0010 0011

把低位的最后兩個(gè)數(shù)字移出:0000 0000 0000 0000 0000 0000 0000 1000

轉(zhuǎn)換為十進(jìn)制: 8

3、無(wú)符號(hào)右移

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

它的通用格式如下所示:

value >>> num

num 指定要移位值value 移動(dòng)的位數(shù)。

無(wú)符號(hào)右移的規(guī)則只記住一點(diǎn):忽略了符號(hào)位擴(kuò)展,0補(bǔ)最高位

無(wú)符號(hào)右移運(yùn)算符>>> 只是對(duì)32位和64位的值有意義

總結(jié)

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

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