java運算符詳解


java運算符:
  定義:用來指明對於操作數的運算方式
  按照操作數數目分類:
    單目運算    數目運算    三目運算
    a++              a+b           (a>b) ? x:y
  按照運算符功能分類:
    算術運算符:
      +    -    *    /    %(取余/取模)
      ++ 自增
      --  自減
      注:int x = 1; int y = x++ 將x變量空間的內容先取出,然后將常量區的1取出x在像做
           值交換的時候會產生一個臨時的副本空間,++(--)在變量前面則先自增后備份,++(--)在
            變量后面則先備份后自增,=號是將備份空間中的值賦值給別人
      例:
        int m =1;
        int n =2;
        int sum = m++ + ++n - n-- - --m +  n-- - --m ;
        System.out.println("m="+m+", n="+n+", sum="+sum);
        m =0 n =1 sum = 2
      賦值運算符:
        = 賦值號
        +=  int x=1 x+=10 ; 相當於 x = x+10   // 11
        -=  int x=10 x-=10 ; 相當於 x = x-10   // 0
        *=  int x=10 x*=10 ; 相當於 x = x*10  // 100
        /=  int x=10 x-=10 ; 相當於 x = x/10   // 1
        %=  int x=10 x%=10 ; 相當於 x = x%10 // 0
        注:
          byte a = 1;
          a +=1; //2
          a = a+1;//編譯報錯
          a = (byte)(a+2) // 強制轉換,通過
              講解:計算機中+=相當於一個運算符,會先用+符號自動的將byte提升為32bit的int類型
            來進行計算,然后在通過=運算符將32bit位的int類型自動降為8bit的數據來存入a
            中,但是a=a+1中的=和+屬於兩個運算符,+將byte中的1提升為32bit來個常量池
            中的1進行相加,但是=賦值時在將32bit位的數據賦值到8bit位中的a空間中,會出
            現編譯報錯
          總結:
            單個運算符后台編譯可以自動提升或者降低bit位來滿足賦值或者計算,但是賦值
            號之后不能自動降級方程式,需要強制轉換
    位運算符:
      &按位與 | 按位或 ^ 按位異或 ~ 按位取反
      <<按位左位移   >>按位右位移   >>>按位又位移(無符號)
        例: 3 & 5 = ?    3 | 5 = ?    3 ^ 5 = ?    ~ 6 = ?
          解:  將3 和 5分別換算成二進制
            3 = 00000000  00000000  00000000  00000011 = 011
            5 = 00000000  00000000  00000000  00000101 = 101
            所以按位&即將011和101進行按位&后在化成10進制(true 為 1 false 為 0)
                  0  1  1
                  1  0  1
                  0  0  1  = 1
            所以按位 | 即將011和101進行按位 | 后在化成10進制(true 為 1 false 為 0)
                  0  1  1
                  1  0  1
                  1  1  1  = 7
            所以按位 ^ 即將011和101進行按位^后在化成10進制(true 為 1 false 為 0)
                  0  1  1
                  1  0  1
                  1  1  0  = 6
            所以按位  即將101進行按位 ~ 后在化成10進制(true 為 1 false 為 0)
            ~6 = -7
            解釋:計算機將0划分在正數行列,所以 -1<-->0  -2 <--->1  -3<--->2 故 -7<-->6
            6  (正數三碼相同)
            00000000 00000000 00000000 0110  (原碼)
            00000000 00000000 00000000 0110  (反碼)
            00000000 00000000 00000000 0110  (補碼)
            -6  (負數三碼不同)
            10000000 00000000 00000000 00000110  (原碼)
            11111111 11111111 11111111 11111001  (反碼:保持符號不動其余取反)
            11111111 11111111 11111111 11111010  (補碼:在反碼基礎上+1)
            計算機中不管是整數還是負數,存儲的形式都是以補碼形式來存儲
            注:反碼是一種表示形式 取反是一個計算過程
          <<按位左位移:
            6<<1=?
              00000110 = 00001100 = 12
              所以往左移相當於*2的位移次冪
            6>>1=?
              00000110 = 00000011 = 3
              所以往左移相當於/2的位移次冪
            負數
            -6 >>>1
              11111111    11111111    11111111    11111010(以補碼計算)
              ?1111111    11111111    11111111    11111101
              注: >> 保留符號位1填1
                    >>> 不保留符號 不管是什么都填0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM