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
相關文章
相關標籤/搜索