久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Java 位運(yùn)算(移位、位與,、或,、異或、非)

 Baruch 2017-08-09

Java提供的位運(yùn)算符有:左移( << ),、右移( >> ) ,、無符號(hào)右移( >>> ) 、位與( & ) ,、位或( | ),、位非( ~ )、位異或( ^ ),,除了位非( ~ )是一元操作符外,,其它的都是二元操作符。

1,、左移( << )

Test1,、將5左移2位:

  1. package com.xcy;  
  2.   
  3. public class Test {  
  4.     public static void main(String[] args) {  
  5.         System.out.println(5<<2);//運(yùn)行結(jié)果是20  
  6.     }  
  7. }  
運(yùn)行結(jié)果是20,但是程序是怎樣執(zhí)行的呢,?

首先會(huì)將5轉(zhuǎn)為2進(jìn)制表示形式(java中,,整數(shù)默認(rèn)就是int類型,也就是32位):

0000 0000 0000 0000 0000 0000 0000 0101           然后左移2位后,低位補(bǔ)0:

0000 0000 0000 0000 0000 0000 0001 0100           換算成10進(jìn)制為20

2、右移( >> ) ,,右移同理,,只是方向不一樣罷了(感覺和沒說一樣)

  1. System.out.println(5>>2);//運(yùn)行結(jié)果是1  
還是先將5轉(zhuǎn)為2進(jìn)制表示形式:

0000 0000 0000 0000 0000 0000 0000 0101 然后右移2位,高位補(bǔ)0:

0000 0000 0000 0000 0000 0000 0000 0001


3,、無符號(hào)右移( >>> )

我們知道在Java中int類型占32位,,可以表示一個(gè)正數(shù),也可以表示一個(gè)負(fù)數(shù),。正數(shù)換算成二進(jìn)制后的最高位為0,,負(fù)數(shù)的二進(jìn)制最高為為1

例如  -5換算成二進(jìn)制后為:

1111 1111 1111 1111 1111 1111 1111 1011   (剛開始接觸二進(jìn)制時(shí),不知道最高位是用來表示正負(fù)之分的,,當(dāng)時(shí)就總想不通,。。明明算起來得到的就是一個(gè)正數(shù)-_-)


我們分別對(duì)5進(jìn)行右移3位,、 -5進(jìn)行右移3位和無符號(hào)右移3位:

  1. package com.xcy;  
  2.   
  3. public class Test {  
  4.     public static void main(String[] args) {  
  5.         System.out.println(5>>3);//結(jié)果是0  
  6.         System.out.println(-5>>3);//結(jié)果是-1  
  7.         System.out.println(-5>>>3);//結(jié)果是536870911  
  8.     }  
  9. }  


我們來看看它的移位過程(可以通過其結(jié)果換算成二進(jìn)制進(jìn)行對(duì)比):

5換算成二進(jìn)制: 0000 0000 0000 0000 0000 0000 0000 0101

5右移3位后結(jié)果為0,,0的二進(jìn)制為: 0000 0000 0000 0000 0000 0000 0000 0000        // (用0進(jìn)行補(bǔ)位)

 -5換算成二進(jìn)制: 1111 1111 1111 1111 1111 1111 1111 1011

-5右移3位后結(jié)果為-1,-1的二進(jìn)制為: 1111 1111 1111 1111 1111 1111 1111 1111   // (用1進(jìn)行補(bǔ)位)

-5無符號(hào)右移3位后的結(jié)果 536870911 換算成二進(jìn)制: 0001 1111 1111 1111 1111 1111 1111 1111   // (用0進(jìn)行補(bǔ)位)


通過其結(jié)果轉(zhuǎn)換成二進(jìn)制后,,我們可以發(fā)現(xiàn),,正數(shù)右移,高位用0補(bǔ),,負(fù)數(shù)右移,高位用1補(bǔ),,當(dāng)負(fù)數(shù)使用無符號(hào)右移時(shí),,用0進(jìn)行部位(自然而然的,就由負(fù)數(shù)變成了正數(shù)了)

注意:筆者在這里說的是右移,,高位補(bǔ)位的情況,。正數(shù)或者負(fù)數(shù)左移,低位都是用0補(bǔ),。(自行測試)



4,、位與( & )

  1. package com.xcy;  
  2.   
  3. public class Test {  
  4.     public static void main(String[] args) {  
  5.         System.out.println(5 & 3);//結(jié)果為1  
  6.     }  
  7. }  
還是老套路,將2個(gè)操作數(shù)和結(jié)果都轉(zhuǎn)換為二進(jìn)制進(jìn)行比較:

5轉(zhuǎn)換為二進(jìn)制:0000 0000 0000 0000 0000 0000 0000 0101

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

-------------------------------------------------------------------------------------

1轉(zhuǎn)換為二進(jìn)制:0000 0000 0000 0000 0000 0000 0000 0001

位與:第一個(gè)操作數(shù)的的第n位于第二個(gè)操作數(shù)的第n位如果都是1,,那么結(jié)果的第n為也為1,,否則為0



5、位或( | )

  1. package com.xcy;  
  2.   
  3. public class Test {  
  4.     public static void main(String[] args) {  
  5.         System.out.println(5 | 3);//結(jié)果為7  
  6.     }  
  7. }  

5轉(zhuǎn)換為二進(jìn)制:0000 0000 0000 0000 0000 0000 0000 0101

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

-------------------------------------------------------------------------------------


7轉(zhuǎn)換為二進(jìn)制:0000 0000 0000 0000 0000 0000 0000 0111

位或操作:第一個(gè)操作數(shù)的的第n位于第二個(gè)操作數(shù)的第n位 只要有一個(gè)是1,,那么結(jié)果的第n為也為1,,否則為0


6、位異或( ^ )

  1. package com.xcy;  
  2.   
  3. public class Test {  
  4.     public static void main(String[] args) {  
  5.         System.out.println(5 ^ 3);//結(jié)果為6  
  6.     }  
  7. }  

5轉(zhuǎn)換為二進(jìn)制:0000 0000 0000 0000 0000 0000 0000 0101

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

-------------------------------------------------------------------------------------


6轉(zhuǎn)換為二進(jìn)制:0000 0000 0000 0000 0000 0000 0000 0110

位異或:第一個(gè)操作數(shù)的的第n位于第二個(gè)操作數(shù)的第n位 相反,,那么結(jié)果的第n為也為1,,否則為0



7、位非( ~ )           位非是一元操作符

  1. package com.xcy;  
  2.   
  3. public class Test {  
  4.     public static void main(String[] args) {  
  5.         System.out.println(~5);//結(jié)果為-6  
  6.     }  
  7. }  


 5轉(zhuǎn)換為二進(jìn)制:0000 0000 0000 0000 0000 0000 0000 0101

-------------------------------------------------------------------------------------

-6轉(zhuǎn)換為二進(jìn)制:1111 1111 1111 1111 1111 1111 1111 1010

位非:操作數(shù)的第n位為1,那么結(jié)果的第n位為0,,反之,。


由位運(yùn)算操作符衍生而來的有:

&= 按位與賦值

|=  按位賦值

^= 按位賦值

>>= 右移賦值

>>>= 無符號(hào)右移賦值

<<= 賦值左移


和 += 一個(gè)概念而已。


舉個(gè)例子:

  1. package com.xcy;  
  2.   
  3. public class Test {  
  4.     public static void main(String[] args) {  
  5.         int a = 5  
  6.         a &= 3;  
  7.         System.out.println(a);//結(jié)果是1  
  8.     }  
  9. }  


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多