程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> java中的移位操作詳解

java中的移位操作詳解

編輯:JAVA綜合教程

java中的移位操作詳解


java中的移位操作只對int和long有效,byte、short、char升級為int後再進行移位

 

移位操作符有>>(右移)、<<(左移)、>>>(右移)三種,注意兩點:1.沒有<<<符號 2.移位是不循環的

三種的區別是

>>是帶符號右移,負數高位補1,正數補0 ----->>>也就是在高位用符號位進行填充。

<<左移不管負數還是正數,在低位永遠補0

>>>是不帶符號右移,不論負數還是正數,高位補0(無符號右移,忽略符號位,空位都以0補齊)

 

在具體的運算中全部轉化為補碼邏輯進行移位或者按位運算。

 

測試程序:

 

[java]    
  1. publicclassShift{
  2. publicstaticvoidmain(String[]args){
  3. System.out.println("******************正數左移在低位補0*******************");
  4. inta=1;
  5. a=a<<2;
  6. System.out.println(a);
  7. System.out.println(Integer.toBinaryString(a));
  8. System.out.println("******************正數右移在高位補0********************");
  9. a=1;
  10. a=a>>2;
  11. System.out.println(a);
  12. System.out.println(Integer.toBinaryString(a));
  13. System.out.println("******從上面結果可以看出:移位是不循環的*****");
  14. System.out.println("看看負數的移位:");
  15.  
  16. System.out.println("***********負數的右移操作高位補1**************");
  17. inti=-1;
  18. System.out.println(i+":");
  19. System.out.println(Integer.toBinaryString(i));
  20. i=i>>2;
  21. System.out.println(i);
  22. System.out.println(Integer.toBinaryString(i));
  23. System.out.println("**********負數的左移操作低位補0*****************");
  24. i=i<<2;
  25. System.out.println(i);
  26. System.out.println(Integer.toBinaryString(i));
  27. System.out.println("*************再看看>>>操作符*************");
  28. System.out.println("*************負數的>>>操作高位補0***************");
  29. i=-1;
  30. System.out.println(Integer.toBinaryString(i));
  31. i=i>>>10;
  32. System.out.println(i+":");
  33. System.out.println(Integer.toBinaryString(i));
  34. System.out.println("*************注意:沒有<<<符號**************");
  35.  
  36. System.out.println("**********byte類型移位時要強轉換*************");
  37. bytek=10;
  38. System.out.println(Integer.toBinaryString(k));
  39. k=(byte)((byte)k>>>2);
  40. System.out.println(Integer.toBinaryString(k));
  41. }
  42. }  
    運行結果:

     

    ******************正數左移在低位補0*******************
    4
    100
    ******************正數右移在高位補0********************
    0
    0
    ******從上面結果可以看出:移位是不循環的*****
    看看負數的移位:
    ***********負數的右移操作高位補1**************
    -1:
    11111111111111111111111111111111
    -1
    11111111111111111111111111111111
    **********負數的左移操作低位補0*****************
    -4
    11111111111111111111111111111100
    *************再看看>>>操作符*************
    *************負數的>>>操作高位補0***************
    11111111111111111111111111111111
    4194303:
    1111111111111111111111
    *************注意:沒有<<<符號**************
    **********byte類型移位時要強轉換*************
    1010
    10

     
       

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved