java學習筆記(二)java運算符

java運算符

運算符 用來指明對於操作數的運算方式
按照操作數的數目來進行分類
單目    雙目    三目
 a++    a+b     (a>b)?x:y ;
 
按照運算符的功能來進行分類
算數運算     + - * / % ++ --
賦值運算     = += -= *= /= %=
關係運算(比較)  > >= < <= != ==
邏輯運算     & | ^ ! && ||
位(bit)運算   & | ^ ~ << >> >>>      

算數運算

 + - * / %(取餘 去模)
 ++(自增) --(自減)
     int x = 1;
     x = x + 1;//x空間內的值 自己增加了一個
     x++; // x空間內的值 自增一個

     ++x; //對於x空間內的值來講 都是一致 最終的結果都自增了一個

     int x = 1;
     int y = x++; // ++在後 先賦值 後自增(先進行計算 後賦值)

在這裏插入圖片描述

     x++; //x = x+1;//將x變量空間的內容先取出 常量區取出1 進行計算 再次存回x空間 
                x在想要做值交換的時候 會產生一個臨時的副本空間(備份)
                ++在變量的前面 先自增後備份 ++在變量的後面 先備份後自增
                會將副本的值賦給別人
public class Test {
  public static void main(String[] args){
        int x = 1;
        int y = x++; 
        System.out.println("x  : "+x); //2
        System.out.println("y  : "+y); //1
        
        int xx = 1;
        int yy = ++xx;
        System.out.println("a  : "+a); //2
        System.out.println("b  : "+b); //2
        int a=1;
        a=a++;
        System.out.println("a  : "+a); //1
  }
}

賦值運算

= 賦值符號 將=右邊的內容(值 引用)存入=左邊的變量空間內
+=    -=    *=    /=    %=
int x = 1;
x+=10; //x=x+10;
        
思路:
 x++;//x自增了一個 需求 讓x增加10個 for循環結構
 x++; //x=x+10;
 ++          for(int i=1;i<=10; i++){
 x++                      x++;
 x++          }
 ...
        
 int x=1;
 x+=2; //?3 x=x+2;
        
 byte x = 1; //1常量32bit =自動轉化
 x+=2;//2 x+2 +自動類型提升 3 =自動轉化
 x=(byte)(x+2);// 編譯出錯 類型從int轉化成byte可能有損失 此處=後是表達式 =不確定類型 無法自動轉化
 x變量空間的值取出 從常量區取過來2 加法運算 結果重新存回x變量空間內
 x空間---->1    8bit
 常量區--->2    32bit
 00000001   +     00000000 00000000 00000000 00000010
 +自動類型提升 8bit--32bit
             00000000 00000000 00000000 00000001
             00000000 00000000 00000000 00000010
            +00000000 00000000 00000000 00000011 ==3    

===================================================

關係運算(比較)

> >= < <= != ==  (instanceof 比較對象是否是一個類)
1.區分 = 和 ==
  =賦值符號  將=後面的結果(值 引用)存入=左邊的變量空間內
  ==比較符號  比較==前面和==後面的元素(值 引用)是否一致
2.比較運算符的最終結果是什麼?
  boolen   true   false
  (3>2)--->true;   (3>4)--->false;    (3==4)--->false;
  (3>=2)--->true;  (3>=4)--->false;   (3!=4)--->true;
  一個條件的判定

邏輯運算

邏輯運算符前後連接的兩個都是boolen的值
邏輯運算最終的結果還是boolen

1.條件 我有時間 同時 2條件 嗓子沒有問題 才能講課 
&邏輯與  |邏輯或    ^邏輯異或  !邏輯非
&&短路與 ||短路或
(3>2) & (3>1)    和 並且
true    true
    true
-------------------------------------------------------------------
(3>5) | (3>4)    或者
false   false   
     false 
-----------------------------------------------------------------     
(3>2) ^ (3>4)   異(不同的)--->前後兩個結果不一致 就可以
true    false   
    true
(3>2) ^ (3>1)   
true    true   
    false
--------------------------------------------------------------------
!(3>2)  !true false 非 取反
--------------------------------------------------------------------
(3>4) && (3>2) =?
false && true   與兩個條件同時滿足 如果當第一個條件已經爲false 最終肯定是false
     false
---------------------------------------------------------------------
 (3>2) || (3>4)
 true  ||       或兩個條件有一個滿足 如果當第一個條件爲true 最終結果爲true 
      true 
 
&&短路與
1.短路 什麼情況下才會發生短路? 當前面的值結果爲false的時候會發生短路
2.短路 到底短路的是什麼?  短路的是&&之後所有計算的過程
3.如果發生了短路情況 性能比 & 稍微好一點
4.&邏輯與 和 &&短路與  從執行的最終結果看了沒有任何區別
5.短路與 不一定提高了性能 只有當前面的爲false的時候纔會發生短路 纔會提高性能


邏輯運算符前後連接的應該是兩個boolen結果
&邏輯與   可以理解爲中文的“和”,"並且"的意思,&前後兩個條件必須同時滿足 最終才爲true
|邏輯或   可以理解爲中文的“或者” |前後兩個條件只要有一個滿足 最終就爲true
^邏輯異或 前後兩個表達式只要結果不相同 最終結果就爲true(專治強迫症)
!邏輯非  可以理解爲中文的"不"  將原來的結果取反

知識補充 進制轉換

十進制 0123456789
二進制 01
如何將十進制---->二進制
60十進制 ---->32個2或1來表示60 60除以2取餘數 將餘數倒敘排列 即爲有效位
00000000 00000000 0000000 00111100
如何將二進制—>十進制 從右至左開始計算 每一個元素乘以2的位置(0開始)次冪最終求和


===================================================================


每三個bit記錄爲一個小組 —>小組長的名字 (3個bit計算成十進制)
00000000 000000 000 000 000 000 111 100
               0  7  4
八進制 012345667
將三個二進制合併爲一個 計算成十進制表示 八進制表示形式以0開頭
074


===================================================================


每四個bit記錄爲一個小組 —>小組長的名字 (4個bit計算成十進制)
00000000 00000000 0000 0000 0011 1100
              0X   3  12  10-A 11-B 12-C 13-D 14-E 15-F
十六進制 012345667189ABCDEF
將三個二進制合併爲一個 計算成十進制表示 八進制表示形式以0開頭
0X3C

位(bit)運算

&按位與    |按位或     ^按位異或  ~按位取反
<<按位左位移   >>按位右位移  >>>按位右位移(無符號)

1.將3和5轉化爲二進制表示形式
2.豎着按照對應位置進行 & | ^ 計算(1--->true,0--->false)
3.將計算後的二進制結果轉化爲十進制
3 & 5 =? 
 00000011
 00000101
 00000001----->1
3 | 5 =?  或
00000011
00000101
00000111------>7
3 ^ 5 =?  異或   
00000011
00000101
00000110------>6

~6=?
知識補充
原碼 反碼 補碼 二進制表示數字
                      6
原碼: 00000000 00000000 00000000 00000110
反碼: 00000000 00000000 00000000 00000110
補碼: 00000000 00000000 00000000 00000110
                負數 -6 
原碼: 10000000 00000000 00000000 00000110 將正數的符號改爲負
反碼: 11111111 11111111 11111111 11111001 符號不動 其餘取反
補碼: 11111111 11111111 11111111 11111010 在負數的反碼上+1
進算機中不管是整數還是負數 存儲的形式都是以補碼的形式來存儲
注意 反碼是一中表現形式 取反是一個計算過程(每一個位置都取反)

~6  6取反
00000000 00000000 00000000 00000110 1.6的二進制
11111111 11111111 11111111 11111001 2.取反得到二進制數 是負數 的補碼
將二進制轉爲十進制    
11111111 11111111 11111111 11111000 3.將負數的bu碼-1改 反碼 
10000000 00000000 00000000 00000111 4.符號不動 其餘取反得到原碼
00000000 00000000 00000000 00000111 5.將負數的原碼轉爲正數原碼
1+2+4=7  取反-7     6.將原碼計算出十進制值爲7 最後值爲-7

6<<1 = 12  6乘以2的1次冪 6*(2*1)=12
00000000 00000000 00000000 00000110
00000000 00000000 00000000 00001100 8+8 = 12

6<<2 = 24 6乘以2的2次冪 6*(2*2)=24
00000000 00000000 00000000 00000110
00000000 00000000 00000000 00011000 16+8 = 24
相當與乘以2的位移次冪 

6>>1=3  6除以2的次冪 6/(2*1)=3
00000000 00000000 00000000 00000110
00000000 00000000 00000000 00000011 2+1=3
相當與除以2的位移次冪

-6>>1 = 3
11111111 11111111 11111111 11111010
?1111111 11111111 11111111 11111101
11111111 11111111 11111111 11111101   1.保留符號位置 1 填1 得到補碼
11111111 11111111 11111111 11111100   2.-1得到補碼
10000000 00000000 00000000 00000011   3.符號不變 其餘取反 得到原碼
00000000 00000000 00000000 00000011   4.得到正數
                          2+1         5.計算得3
>>保留符號位置 1 填1
>>>不保留符號 不管是什麼 都填0

-6>>>1 = 
11111111 11111111 11111111 11111010
?1111111 11111111 11111111 11111101
01111111 11111111 11111111 11111101   1.不保留符號 不管是什麼 都填0
1*2 ^0    1                      
0*(2^1=2) 0                  1 
1*2^2     4                  5
1   ^3    8                  13   
    ^4    16                 29
    ^5    32                 61
    ^6    64                 125
     7    128                253
     8    256                509
     9    512                1021
     10   1024               2045         
     11   2048               4463
     12   4096              
     13   8192              
     14   16384             
     15   32768             
     16   65536
     17   131072           
     18   262144           
     19   524288             
     20   1048576            
     21   2097152             
     22   4194304             
     23   8388608             
     24   16777216             
     25   33554432           
     26   67108864           
     27   134217728        
     28   268435456             
     29   536870912          
     30   1073741824
0 *2^31   2147483648        

發佈了31 篇原創文章 · 獲贊 0 · 訪問量 7211
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章