日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Java的位移運(yùn)算巧方法

左移操作: x << n

和平網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

x可以是byte, short, char, int, long基本類型, n(位移量)只能是int型

編譯器的執(zhí)行步驟:

1) 如果x是byte, short, char類型, 則將x提升為int;

2) 如果x是byte, short, char, int類型, 則n被重新賦值(過(guò)程是:取n的補(bǔ)碼的低5位再轉(zhuǎn)成十進(jìn)制的int值,相當(dāng)對(duì)n取32模: n=n%32);

如果x是long型, 則n被重新賦值(過(guò)程是:取n的補(bǔ)碼的低6位再轉(zhuǎn)成十進(jìn)制的int值,相當(dāng)對(duì)n取64模: n=n%64);

(因?yàn)閕nt類型為4個(gè)字節(jié),即32位,移動(dòng)32位將沒(méi)有任何意義.對(duì)于long則是模64)

3) 對(duì)x左移n個(gè)位數(shù), 整個(gè)表達(dá)式產(chǎn)生一個(gè)新值(x的值不變);

<<是左移符號(hào),列x<<1,就是x的內(nèi)容左移一位(x的內(nèi)容并不改變)

>>是帶符號(hào)位的右移符號(hào),x>>1就是x的內(nèi)容右移一位,如果開(kāi)頭是1則補(bǔ)1,是0責(zé)補(bǔ)0,(x的內(nèi)容并不改變).

>>>是不帶符號(hào)位的右移,x>>>1就是x的內(nèi)容右移一位,開(kāi)頭補(bǔ)0(x的內(nèi)容并不改變)

補(bǔ)充說(shuō)明:

Java代碼

 
 
 
  1. // 左移: 向左移動(dòng),右邊補(bǔ)0   
  2.   for (int i = 0;i < 8 ;i++)   
  3.   System.out.print( (1 << i) + " "); 

output

1 2 4 8 16 32 64 128

 
 
 
  1. // 右移: 向右移動(dòng),如果符號(hào)位(int型為32位)為0,左邊補(bǔ)0,符號(hào)位為1,左邊補(bǔ)1   
  2.   // 符號(hào)位為1的右移   
  3.   for (int i = 0;i < 8 ;i++)   
  4.   System.out.print( Integer.toHexString(0x40000000 >> i) + " "); 

output

40000000 20000000 10000000 8000000 4000000 2000000 1000000 800000

 
 
 
  1.  // 符號(hào)位為1的右移   
  2.   // 最高4位為1000, 右移1位,變成1100也就是c,   
  3.   for (int i = 0;i < 8 ;i++)   
  4.   System.out.print( Integer.toHexString(0x80000000 >> i) + " "); 

output

80000000 c0000000 e0000000 f0000000 f8000000 fc000000 fe000000 ff000000

上面的通用法則沒(méi)有錯(cuò),但是有一個(gè)限制,對(duì)int型,移位的位數(shù)不超過(guò)32,對(duì)long型,移位的位數(shù)不超過(guò)64?,F(xiàn)在進(jìn)行如下測(cè)試:

Java代碼

 
 
 
  1. System.out.println(Integer.toHexString(0x80000000 >> 31));   
  2.   // output: ffffffff   
  3.   System.out.println(Integer.toHexString(0x80000000 >> 32));   
  4.   // output: 80000000 

0x80000000在右移31位后,每個(gè)位都成了1(也就是-1),按照這個(gè)想法,右移32位理所當(dāng)然的還是-1,可是右移32位后,得到的結(jié)果卻又這個(gè)數(shù)本身。

通過(guò)對(duì)int,long類型數(shù)據(jù)左右移進(jìn)行測(cè)試,發(fā)現(xiàn):

Java對(duì)移位運(yùn)算"a <<||>> b"的處理,首先做 b mod 32||64運(yùn)算, 如果a是int型,取mod 32,如果a是double型,取mod 64,然后再使用上面提到的通用移位運(yùn)算規(guī)則進(jìn)行移位。

到這里,就可以理解為什么在BitSet類中是

 
 
 
  1. 1L << bitIndex 

這條語(yǔ)句,因?yàn)槭煜dk的Programer知道,再寫 1L << (bitIndex % 64) 對(duì)jdk來(lái)說(shuō)是多余的。

原文連接:http://blog.csdn.net/hopezhangbo/article/details/7348740

【編輯推薦】

  1.  Java7的一個(gè)新類JLayer:裝飾的Swing組件
  2. 關(guān)于Java中內(nèi)存溢出的解決辦法
  3. Java中的面向?qū)ο筇匦?/li>
  4. 探究Java初始化的過(guò)程
  5. Java集合框架的知識(shí)總結(jié)

當(dāng)前題目:Java的位移運(yùn)算巧方法
當(dāng)前地址:http://www.dlmjj.cn/article/djhocpi.html