day03-----------java 語言基礎(基礎語法)(傳智視頻)


1:在定義Long或者Float類型變量的時候,要加L或者f。
  整數默認是int類型,浮點數默認是double。
  byte,short在定義的時候,他們接收的實際上是一個int類型的值。
  這個是本身作了一個數據檢測的,若是再也不它們的範圍內,就報錯。
2:byte值的問題
byte b1 = 127;
byte b2 = (byte)128; //-128
byte b3 = (byte)129; //-127
byte b4 = (byte)130; //-126

byte的範圍:-128 ~ 127
128:10000000
-128:10000000 (這裏的1便是符號位,也是數值位)
3:數據類型轉換之默認轉換
byte,short,char -- int -- long -- float -- double
long: 8個字節
float:4個字節
舉例:
17.625在內存中的存儲
首先要把17.625換算成二進制:10001.101
整數部分,除以2,直到商爲0,餘數反轉。
小數部分,乘以2,直到乘位0,進位順序取。
在將10001.101右移,直到小數點前只剩1位:
1.0001101 * 2^4 由於右移動了四位
這個時候,咱們的底數和指數就出來了
底數:由於小數點前必爲1,因此IEEE規定只記錄小數點後的就好。因此,此處的底數爲:0001101
指數:實際爲4,必須加上127(轉出的時候,減去127),因此爲131。也就是10000011
符號部分是整數,因此是0
綜上所述,17.625在內存中的存儲格式是:
01000001 10001101 00000000 00000000
A:它們底層的存儲結構不一樣。
B:float表示的數據範圍比long的範圍要大
long:2^63-1
float:3.4*10^38 > 2*10^38 > 2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1

4:Java語言中的字符char能夠存儲一箇中文漢字嗎?爲何呢?
能夠。由於java語言中的字符佔用兩個字節。
Java語言採用的是Unicode編碼。

                System.out.println(x/y); //整數相除只能獲得整數
//我就想獲得小數,該腫麼辦呢?
//只須要把操做的數據中任意的一個數據變爲浮點數
System.out.println(x*1.0/y);
注意事項:
A:整數相除只能獲得整數。若是想獲得小數,必須把數據變化爲浮點數類型
B:/獲取的是除法操做的商,%獲取的是除法操做的餘數

&&和&的區別? 同理||和|的區別?
A:最終結果同樣。
B:&&具備短路效果。左邊是false,右邊不執行。
開發中經常使用的邏輯運算符:&&,||,!

~按位取反運算符:0變1,1變0(System.out.println(~3))
		00000000 00000000 00000000 00000011
	   ~11111111 11111111 11111111 11111100 (補碼)
	   
	   補碼:11111111 11111111 11111111 11111100
	   反碼:11111111 11111111 11111111 11111011(補碼減1)
	   原碼:10000000 00000000 00000000 00000100(反碼符號位不變,其餘位置0變1,1變0)
	結果是:-4
(正數的原反補都相同)

/*
	^的特色:一個數據對另外一個數據位異或兩次,該數自己不變。
*/
class OperatorDemo2 {
	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		
		System.out.println(a ^ b ^ b); //10
		System.out.println(a ^ b ^ a); //20
	}
}
/*
	面試題:
		請本身實現兩個整數變量的交換
		注意:之後講課的過程當中,我沒有明確指定數據的類型,默認int類型。
*/
//方式2:用位異或實現(面試用)
		//左邊:a,b,a
		//右邊:a ^ b
		/*
		a = a ^ b;
		b = a ^ b; //a ^ b ^ b = a
		a = a ^ b; //a ^ b ^ a = b
		System.out.println("a:"+a+",b:"+b);
		*/
//方式4:一句話搞定
		b = (a+b) - (a=b); //b=30-20=10,a=20
		System.out.println("a:"+a+",b:"+b);
		
/*
	<<:左移	左邊最高位丟棄,右邊補齊0
	>>:右移	最高位是0,左邊補齊0;最高爲是1,左邊補齊1
	>>>:無符號右移 不管最高位是0仍是1,左邊補齊0
	
	面試題:
		請用最有效率的方式寫出計算2乘以8的結果?
			2 * 8
			
			2 << 3

*/
class OperatorDemo3 {
	public static void main(String[] args) {
		//<< 把<<左邊的數據乘以2的移動次冪
		System.out.println(3 << 2); //3*2^2 = 3*4 = 12;
	
		//>> 把>>左邊的數據除以2的移動次冪
		System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6
		System.out.println(24 >>> 2);
		
		System.out.println(-24 >> 2); 
		System.out.println(-24 >>> 2);
	}
}
/*
	計算出3的二進制:11
		00000000 00000000 00000000 00000011
	(00)000000 00000000 00000000 0000001100
		
	>>的移動:	
	計算出24的二進制:11000
		原碼:10000000 00000000 00000000 00011000
		反碼:11111111 11111111 11111111 11100111
		補碼:11111111 11111111 11111111 11101000
		
		11111111 11111111 11111111 11101000
		1111111111 11111111 11111111 111010(00) 補碼
		
		補碼:1111111111 11111111 11111111 111010
		反碼:1111111111 11111111 11111111 111001
		原碼:1000000000 00000000 00000000 000110
		
		結果:-6
		
	>>>的移動:
		計算出24的二進制:11000
		原碼:10000000 00000000 00000000 00011000
		反碼:11111111 11111111 11111111 11100111
		補碼:11111111 11111111 11111111 11101000
		
		11111111 11111111 11111111 11101000
		0011111111 11111111 11111111 111010(00)
		
		結果:
*/

//報錯
		//int z = ((x = y)? x : y);//結果是一個boolean類型。
		
if語句第一種格式:  if(關係表達式) {
                        語句體   
                        } 
if語句第二種格式:  if(關係表達式) { 
                           語句體1;   
                   }else {   
                        語句體2;  
                   }      
if語句第三種格式:  if(關係表達式1) {
                            語句體1;  
                    }else  if (關係表達式2) {    
                            語句體2;
                    }     
                     …  
                     else { 
                            語句體n+1;  
                     }
相關文章
相關標籤/搜索