變數與識別符號

2020-08-13 21:06:30

1. 變數與識別符號

1.1 變數

是指沒有固定的值,可以改變的數。從計算機角度解釋就是,變數就是系統爲程式分配的一塊記憶體單元,用來儲存各種型別的數據。根據所儲存的數據型別的不同,有各種不同類型的變數。

1.2 變數分類

按所屬的數據型別劃分:基本數據型別變數、參照數據型別變數; 按被宣告的位置劃分:區域性變數:方法或語句塊內部定義的變數;成員變數:方法外部、類的內部定義的變數

1.3 八種基本數據型別

數據型別 關鍵字 佔用位元組 預設值
布爾型 boolean 不定值 false
位元組型 byte 1 0
短整型 short 2 0
整型 int 4 0
長整型 long 8 0
字元型 char 2 ‘\u0000’
單精度浮點型 float 4 0.0F
雙精度浮點型 double 8 0.0D

1.4 進位制與轉換

二進制數轉換成十進制數:
按權相加:把二進制數首先寫成加權係數展開式,然後按十進制加法規則求和。例:原碼1011.01=1x23+0x22+1x21+1x20 +0x2-1 +1x2-2 =8+0+2+1+0.25=11.25

十進制數轉換成二進制數:
整數部分:"除2取餘,逆序排列"法
小數部分:"乘2取整,順序排列"法

2 89							
2 44 ... 1
2 22 ... 0
2 11 ... 0
2 5 ... 1
2 2 ... 1
2 1 ... 0
0    ... 1
則整數部分 89 轉換成二進制 1011001
 0.625
 x2
 1.25
 x2
 0.5
 x2
 1.0
則小數部分 0.625 轉換成二進制  0.101

1.5 基本數據型別轉換

自動型別轉換:容量小的型別自動轉換成容量大的型別:byte,short,int它們三者在計算時會轉換成int型別,如果把int值轉換成float值,或者long轉換成double值,不需要強制轉換,但可能丟失精度。因爲,byte,char, short,int, long屬於精確值,精確值轉近似值float、double時,可能丟失精度。
【例子】

public class Test{
public static void main(String [ ] args ){
short s1=10;//short,int在計算時轉換成int型別
int s2=s1+1;//所以這個地方接收數據的型別需定義成int型,否則會報錯
System.out.println(s2);
	}
}

強制型別轉換:容量大的型別轉換成容量小的型別時,需加上強制轉換符

long n=100L;
int i=(int) n;

有可能造成精度降低或者數據溢位,使用時要小心。boolean型別不能轉換成任何其他數據型別。
【例子】

public class Test{
public static void main(String [ ] args ){
short s1=10;//short,int在計算時轉換成int型別
s1=(short) s1+1;//所以這個地方s1需強制型別轉換成short型,或者按上面的吧接受數據型別定義成int型
System.out.println(s1);
	}
}

1.6 跳脫字元

符號 功能
\n 換行,將當前位置移到下一行開頭
\r 回車,將當前位置移到本行開頭
\t 水平製表,相當於一個Tab,即遊標跳到下一個Tab位置
\\\backslash\backslash 代表一個反斜線字元"’
\\backslash' 代表一個單引號(撇號)字元
\\backslash'' 代表一個雙引號字元

1.7 算數賦值關係運算符

【例子】

import java.util.Scanner;//接受鍵盤輸入的工具類
//賦值運算子
public class Test{
public static void main(String [ ] args ){
short s1=10;//short,int在計算時轉換成int型別
 //s1=s1+1;//所以這個地方接收數據的型別需定義成int型,否則會報錯
 s1+=1;//寫成這種表達方式,就不會出現上面的型別問題
System.out.println(s2);

//建立一個鍵盤輸入的工具
Scanner input=new Scanner(System.in);
System.out.println("請輸入一個整數:");
int x1=input.nextInt();//從鍵盤接收一個整數
System.out.println(x1);
System.out.println("請輸入一個字串:");
String s= input.next();//從鍵盤接收一個字串
System.out.println(s);
	}
}

1.8 邏輯運算子

邏輯運算子:用於對boolean型結果的表達式進行運算,運算結果總是boolean型,

運算子 描述 範例 結果
& false & true false
\mid false & true true
^ 互斥或 true ^ false true
! ! true false
&& 短路與 false && true false
\mid\mid 短路或 false \mid\mid true true

在計算機中,非0即真,0爲假
邏輯或:或1則1
邏輯與:全1則1

1.9 位移運算子

左移:"a << b; " 將二進制形式的a逐位左移b位,最低位空出的b位補0
帶符號右移:"a >> b; "將二進制形式的a逐位右移b位,最高位空出的b位補原來的符號位
無符號右移:"a >>> b; " 將二進制形式的a逐位右移b位,最高位空出的b位補0
【例子】

面試題:以最快的速度計算8*4結果?
使用位移的方法是最快的。
int result = 8 << 2;
左移演算法:位移數作爲2的次冪與運算元相乘
// 10 * 4
10 << 2=40
右移演算法:運算元除以位移數的2次冪
// 40/4
40 >> 2=10
//通過鍵盤輸入,初始化兩個數將這兩個數據交換位置後,輸出顯示交換後的數據
Scanner input =new Scanner(System.in);
System.out.println("請輸入第一個數";
int a =input.nextInt();
System.out.println("請輸入第二個數");
int b=input.nextInt();
int c=a;//通過第三個變數交換兩個數
a=b;
b=c;
a=a+b-(b=a);//或者通過表達式實現不用通過第三個變數交換兩個數
a=a^b;//或者通過互斥或實現兩個數交換位置最快的方法
b=a^b;
a=a^b;
System.out.println("a="+a+",b="+b);