乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       Baruch 2017-08-09

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

      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í)行的呢?

      首先會將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、無符號右移( >>> )

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

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

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


      我們分別對5進(jìn)行右移3位、 -5進(jìn)行右移3位和無符號右移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)行對比):

      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無符號右移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ù)使用無符號右移時,用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個操作數(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

      位與:第一個操作數(shù)的的第n位于第二個操作數(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

      位或操作:第一個操作數(shù)的的第n位于第二個操作數(shù)的第n位 只要有一個是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

      位異或:第一個操作數(shù)的的第n位于第二個操作數(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)算操作符衍生而來的有:

      &= 按位與賦值

      |=  按位賦值

      ^= 按位賦值

      >>= 右移賦值

      >>>= 無符號右移賦值

      <<= 賦值左移


      和 += 一個概念而已。


      舉個例子:

      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. }  


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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多