day02標識符,二進制轉換,位運算符,類型轉換,if,switch


2.1關鍵字,2.2標識符,2.3註釋,2.4常量和變量,
2.5運算符,2.6語句,2.7函數,2.8數組。


//2.2標識符。
在程序中自定義的一些名稱
由26個字母,數字,$_二個符號。
規則:
1.數字不能開頭。
2.不能用關鍵字。
java中嚴格區分大小寫。
main雖然不是關鍵字。但也是被jvm識別的。
命名規範:
包名:所有字母都是小寫
類名接口名:多單詞組成時,所有單詞的首字母大寫
變量名和函數名,多單詞組成時,第一個單詞首字母小寫,
其他單詞的首字母大寫。
常量名:所有字母都大寫。
//2.4常量和變量
常量:表示不能改變的數值。
1.整數常量:所有整數。
2.小數常量:所有小數。
3.布爾型常量:只有二個值:true,false.
4.字符常量:將一個數字或字母,數字符號用單引號('')標識。
5.字符串常量:將一個或多個數字或字母用雙引號("")標識。
6.null常量:只有一個數值就是null.


對於整數,java有三種表現形式。
十進制:0-9,滿10進1.
八進制:0-7,滿8進1,用0開頭表示。
十六進制:0-9,A-F,滿16進1,用0x開頭表示。


每個字節由八個開關組成。八個二進制。10100101。


二進制的每三個變成一個,變成八進制。
二進制的每四位變成1位,十六進制。更方便的表示數據。


//十進制和二進制:
十轉二:6的二進制。
原理:對十進制數進行除2運算。6/2=011,反過來寫110。
System.out.println(Integer.toBinaryString(6));


二進制變十進制。
原理:二進制乘2的過程。
110:0*2(0)+1*2(1)+1*2(2)=6;
0     0   1   1   0   1   0   1 =
128   64  32  16  8   4   2   1 = 


5    +    4   =    9
101  +   100  =  1001




轉成十六進制。四個二進制就是一個16進制位。


0101-1010:90(先變十進制,再變十六)
5 10(A)  = 0x5A


轉成八進制:三個二進制代表一位。
001 011 010 =132。
132


負數二進制表現形式:
6 = 110(0000-0000 0000-0000 0000-0000 0000-0110)
-6 =   (1111-1111 1111-1111 1111-1111 1111-1001)
0000-0000 0000-0000 0000-0000 0000-0001
1111-1111 1111-1111 1111-1111 1111-1010=-6
-6:其實就是6的二進制取反再加1。
負數的二進制的最高位都是1,怎麼來的?取反來的。


//變量:就是將不確定的數據進行存儲。也就是需要在內存中
開闢一個空間。
如何開闢內存空間呢?就是明確數據類型,

明確變量名和數據來完成的。


byte:一個八位,八個二進制位。(-128-127)
short:2個八位。16個二進制。
int :四個八位。  long l = 4l:


數據類型 變量名 = 初始化值;int x = 4;
float f = 2.3f;(四個八位)
char ch = '4'; char ch3 = ' ';可以。
char ch = "你";可以的
當數據不確定的時候,需要對數據進行存儲時,
就定義一個變量來完成存儲。


自動類型轉換(也叫隱式類型轉換)
強制類型轉換(也叫顯式類型轉換)
//類型轉換的原理 
什麼時候要用強制類型轉換?
表達式的數據類型自動提升
所有的byte,short,char的值將被提升爲int型。
字符1和數字1不同。'1':49
char爲什麼能進行運算?因爲在ascii碼中都有對應的數字。

2.5 算術運算符+-*/,++,--,
賦值運算符
比較運算符
邏輯運算符
位運算符
三元運算符
取模就是取餘數。10%4=2
5%1=0;左邊小於右邊,取模爲左邊。
取模的正負看左邊。
b=a++;++叫給a變量的值加1,並賦給b,是先賦值再自加。
b=++a;a先自加,再賦值。
+:可作字符串連接符。字符串數據和任何數據使用+號都是連接,
都會變成字符串。


轉義字符。通過\反斜線來轉變後面字母或者符號的含義。
\n:換行。\b:退格 \r:回車鍵 \t:相當於tab.製表符


賦值運算符=
x+=4;相當於x=x+4;
short s = 4;s=s+5;不行的。二次運算,不會自動轉換。
short s = 4;s+=5;可行的。一次運算,在範圍內會自動轉換。
比較運算符,>,<,==:結果爲真或假。
邏輯運算符
&,|,^,!,&&,||,
x>3 & x<6
&特點:只要兩邊的boolean,只要二邊一個false,結果就是false,
只有二邊都爲true,才爲true;
^:異或:就是和|不一樣,當true^true = false;
兩邊相同,結果爲false,兩邊不同,結果爲true;
false ^false = false;
&&:短路與:當前面的表達式不成立時,後面不再運算.
||當左邊爲true,右邊不參與。


3<<2:3左2位。
  3    <<  2:爲12
0000-0011-〉0000-1100;12.後面補0。
6>>2:6右移2位:爲1
0000-0110 >>0000-0001。前面補0
3<<2:3*4;3*2的二次方。


<<向左移,移多少位,就是乘二的幾次冪。
>>向右移,移多少位,就是除以二的幾次冪。
6>>2:6/4=1轉換成int,小數捨去。
>>右移,最高位爲1,前面補1。
>>>:無符號右移。無論最高位是什麼,都用0補。


6  &  3  =  2;
110&011 =010; (0不假,1爲真)


6   |  5 = 7;
110 | 101 = 111;
異或:
6   ^  5  =3
110 ^ 101 = 011
   
   ~:反碼,就是取反。
   7^4^4=7;一個數異或一個數二次,結果還是那個數。


  練習題:最有效率的方式算出2乘以8等於幾?
   最有效率的方式是二進制的左移右移,乘以8就相當於向
   左移動3位,2的三次方等於8,所以爲 2<<3 ;(位運算)


   對二個整數變量的值進行互換,不要第三方變量。
   需要第三方變量的互換我們都會,那不需要第三方的變量呢?
   關鍵就是藉助一個數異或同一個數二次,會變回原來的值。


   int x =3; int y = 8;
//第一種。
   x = x + y;
   y = x - y;
   x = x - y;


   x = x ^ y;
   y = x ^ y;
   x = x ^ y;


   三元運算符。
   (條件表達式)?表達一:表達表二。
   條件表達式爲真,就計算表達式一,條件爲假就計算二。
好處:可以簡化if else代碼。
弊端:因爲是一個運算符,所以運算完成必須要有一個結果。




   拿最低四位,
   那就是拿最低四位的1,那就拿四個1去與一下。拿15去與。


   拿第二個最低四位。先右移四位,再拿四個1去與。


   12-10=2+'A';(char)67;(char)(12-10+'A');


2.6程序流程控制
判斷結構,選擇結構,循環結構


判斷結構if()
1。 if(條件表達式)  
{
執行語句;
}


2.  if(條件表達式)  
{
執行語句;
}else
{
執行語句;
}


3.  if(條件表達式)  
{
執行語句;
}else if(條件表達式)
{
執行語句;
}
...
else
{
執行語句;
}
注意,一個if是一個語句。
需求,根據用戶指定月份,打印相對應的季節。




選擇結構:
switch (表達式)
{
case 取值一 :
執行語句;
break;
case 取值二 :
執行語句;
break;
...
default:
執行語句;
break;//(最後的break可以省略)
}
//表達式的值只接受四種,byte,short,int ,char,1.5版本。
//default,可以隨便放哪,都在最後執行。
//二種結束方式,一爲break;一爲最後的大括號。


//傳說 switch 比 if 語句的效率高。


if和switch語句很像
具體什麼場景下,應用哪個語句?
如果判斷的具體數值不多,而是符合 byte short int char 這四種類型
雖然兩個語句都可以使用,建議使用switch,因爲效率稍高。
其他情況:對區間的判斷,對結果是boolean類型的,使用if,範圍更廣。
另:switch 在jdk5.0版本增加對枚舉選擇,7.0增加對 String 選擇。

不管switch語句中如何  只要碰到第一個合適的case(如果找不到合適的case 則爲default) 將繼續執行下去 直到遇到第一個break退出

int   a  = 10  ;
switch(a){
case 1:
case 2:show("2");
case 10:show("10");
case 3:show("3");
case 4:show("4");break;
case 5:
case 6:
default: show("default");


輸出:

10 
3
4

找到 case 10 繼續順序執行  直到碰到第一個break


但是將case10 刪掉 有如下所示又會怎麼樣呢?:

a  = 10;

switch(a){
case 1:
default: show("default");
case 2:show("2");
case 4:show("4");break;
case 3:show("3");
case 5:
case 6:

}


如圖 第一步:a = 10 本就該去匹配 case 10 但是找不到 故去匹配default

第二步:因爲匹配了default後 沒有break 繼續執行default 後面的代碼 直到找到case4 的break 退出switch

所以結果爲:

default
2
4


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