變數與運算
- 變數
變數用來儲存資料的方法,你可以想像電腦把資料儲存在記憶體中保存,你可以
利用變數儲存或是讀取,雖然程式中的變數用來表示資料的內容,但是它還是有
一些限制,會造成編譯問題。例如: 存放的資料超出變數的空間。
利用變數儲存或是讀取,雖然程式中的變數用來表示資料的內容,但是它還是有
一些限制,會造成編譯問題。例如: 存放的資料超出變數的空間。
變數命名的規則:
命名規則 )
1. 不可以使用關鍵字,像: new, for, switch ....
1. 不可以使用關鍵字,像: new, for, switch ....
2. 不可以使用特殊的符號像%,-等等
命名習慣 )
1. 不要用底線字元
2. 同名但是大小寫不同
3. 第一個識別子為小寫,駝峰命名法
- 變數宣告
"整數資料",該整數給予變數的值為12。
EX: int age = 12
(1) 宣告的方式
單一 : int a = 12
多變數: int a = 12, b = 15, c = 20
(2)基本資料型態
型別 | 意義 | 大小(byte) | 資料範圍 |
int | 整數 | 4 | -232~232-1 |
long | 長整數 | 8 | -263~263-1 |
float | _ | 4 | -/+1.5X1045~-/+3.4X1038 |
double | 雙精確度 | 8 | -/+5.0X10-24~-/+-1.7208 |
decimal | 貨幣 | 4 | -232~232-1 |
string | 字串 | 4 | 0~216-1 |
bool | 邏輯 | 1 | true , false |
EX: float price = 30.05f //需要用"f"來告訴編譯器,這是浮點型別
(3)錯誤的寫法
string userName ; //未能給userName預設值
Console.WriteLine(userName)
(4)資料型態的尾缀子
需要加上尾缀字編譯器才可以幫你轉換正確的資料型態,例如price如果
沒有加上編譯器會自動轉換成double的資料
沒有加上編譯器會自動轉換成double的資料
long price = 0.24L
float amount = 0.242f
decimal coin = 100.0 d
bool isUse = false
(5) 變數生命週期
就是變數可以使用的範圍
class name
{
public int a = 0 ; // 會隨的物件的生命週期
{
int b = 0 ; //只有在大括號內才可以使用
}
}
- Null型別
當我們使用變數時,我們會給他初始值但是通常需要明確的資料內容,不能指定
為NULL,所以當我們需要指定初始值為NULL時,來方便去處理資料,我們可以
使用下列方式宣告
T? 或是 System.Nullable<T>
Ex: int x = null;
int? y = null;
System.Nullable<int> x1 =10 ;
System.Nullable<double> x2 =10 ;
- 常數
常數是一個特殊的變數值,當你宣告常數必須立即給予預設值,宣告方式為
在資料 型別加上const的關鍵字,例如一星期有七天。
在資料 型別加上const的關鍵字,例如一星期有七天。
Ex: const int myWeek= 7
- 算數運算子
1)算術運算子為一般我們常用的數學的運算數: 加(+)、減(-)、乘(*)和除法(/),
使用四則運算前需要注意資料型態之前的關係,像減法(-)不能用在string與
bool上面做計算。
使用四則運算前需要注意資料型態之前的關係,像減法(-)不能用在string與
bool上面做計算。
class Program { static void Main(string[] args) { int a = 1; string b = "A"; bool c = true; System.Console.Write(a - b); System.Console.Write(a - c); } } |
會視為 int型別,這樣會造成結果為0,但是正確答案應該為0.5才對。所以我們
需要做型別轉換,才可以達到正確的資料,接下來我們討論型別轉換的方法。
3)當我們做數值運算時,任意數除以0都會出現,編譯器會出現Infinity,表示運算
結果為無窮大。例外情況是當0/0會出現NaN,解釋為not a number(不是一個數字)
,在實際運算時需要避開這種運算的情況。
- 資料型別轉型
發生運算時,造成錯誤或是遺失資料的準確性。我們都可以利用型別轉換來處
理這類的問題發生,我們可以分為隱含轉型和明確轉型
1) 隱含轉型: 兩邊的資料型態可以相容或是儲存的變數容量容納另一邊給予的值,
這種我們稱為隱含轉型。
這種我們稱為隱含轉型。
//型別轉換例題 namespace 隱含轉型 { class Program { static void Main(string[] args) { //撰寫第一個程式 int a = 100; // int 2 bytes double result = a; // double 8bytes System.Console.WriteLine(result); // } } } |
2) 明確轉型: 兩邊的資料型態可以相容或是儲存的變數容量小於另一邊給予的
值的大小,我們需要做轉換的動作,我們稱為轉型(cast)。
值的大小,我們需要做轉換的動作,我們稱為轉型(cast)。
//明確轉型 namespace 明確轉型 { class Program { static void Main(string[] args) { //撰寫第一個程式 double a = 100d; // int 2 bytes int result = (int) a ; // double 8bytes System.Console.WriteLine(result); // } } } |
- 運算優先權(precedence)
決定運算的優先順序,在日常我們常用的先乘除後加減的道理,用在計算機的
世界也是同理可證。
世界也是同理可證。
表整理 : 權限由高到低
優先順序 | 意義 | 運算符號 | 例子 |
1 | 主要(Primary) | x++, typeof, f(x), a[x] | |
2 | 一元(Unary) | + - ! ~ ++ -- (T)x | |
3 | 乘數(Multiplicative) | * / % | |
4 | 加數(Additive) | + - | |
5 | 位移(Shift) | << >> | |
6 | Relational and type testing | < > <= >= is as | |
7 | 相等(Equality) | == != | |
8 | Logical AND ,OR | & | | |
9 | 邏輯(Conditional AND ,OR) | && || | |
10 | Conditional | ?: | |
11 | 指定ˋAssignment | = *= /= %= += -= <<= >>= &= ^= |=
| e |
1)遞增或遞減
遞增或遞減就是將數值加1/減1作運算。
遞增: ++i , i++ ;
遞減: --i , i-- ;
EX1:
int intX = 0 ;
int i = 0 ;
intX = i++ ;
System.Console.WriteLine(i++); //Output:0
System.Console.WriteLine(intX ); //Output:0
EX2:
i = 0 ;
int intY = 0 ;
intY= ++i
System.Console.WriteLine(++i); //Output: 1
System.Console.WriteLine(intY); //Output: 1
說明: 我們可以想像i++/++i都是將數值加1,當實際上他有兩個步驟需要考慮
例如i++=>(1)i = i (2) i = i + 1 , 所以列印才會印出0的數值。但是++i就是將
++i =>(1) i= i + 1(2)i = i , 所以列印才會印出1的數值
- 多元運算式
(1)一元運算式:
使用一個運算元,做運算 , ++x , --x
(2)二元運算式:
使用兩個運算元
(3)三元運算式:
就是
- Var型別
var型別是C#特有的型別,稱為隱含型區域變數,它需要符合兩個條件:
1.需要初始化 EX: var money = 100.00d;
2.初始化後的型別類型就不能更改,例如: var money = 100d ; money= "AAA"(X)
3.初始化就覺得它的資料型別,例如: var money = 100d (double)
- 注意事項
區域變數需要初始化
namespace 區域變數 { class Program { static void Main(string[] args) { //撰寫第一個程式 double a ; System.Console.WriteLine(a); // 出現錯誤:使用指定的區域變數a } } } |
留言
張貼留言