三葉蟲也能學會的C#零基礎入門教程 02
https://b23.tv/STnGL5b 1、探索整數(shù)數(shù)學運算 正確 int a = 18; int b = 6; int c = a + b; Console.WriteLine(c); C#類型分為引用類型和值類型 引用類型存儲的是數(shù)據(jù)的引用,包含用戶定義類型和預定義類型 值類型存儲的直接是數(shù)據(jù),包含結(jié)構(gòu)體、枚舉、可空類型,而我們的bool和int都屬于預定義結(jié)構(gòu)體 C#當中的數(shù)值運算顯然符合數(shù)學本身的定義 錯誤 int a = 18; int b = 0; int c = a / b; Console.WriteLine(c); 異常(exception)∶指的是程序運行當中不符合預期狀況時,系統(tǒng)會對此進行報告并中斷程序的運行;這類狀況是系統(tǒng)定義或者由用戶自定義的 拋出這些異常主要是為了確保程序能如期運行,并在出現(xiàn)這些異常時可以人為進行干預 捕獲異常 int a = 18; int b = 0; int c = 0; try{ c = a/b; } catch(System.DivideByZeroException e){ Console.WriteLine("捕獲到除數(shù)為零異常"); c = a; } Console.WriteLine(c); 2、探索整數(shù)運算 在C#當中進行四則運算的優(yōu)先級與數(shù)學運算規(guī)則是一樣的 int a = 5; int b = 4; int c = 2; int d = a + b * c; Console.WriteLine(d); 括號可以強制改變運算順序 int a = 5; int b = 4; int c = 2; int d = (a + b) * c; Console.WriteLine(d); 整數(shù)有一個非常有趣的行為∶整數(shù)除法始終生成整數(shù)結(jié)果,即使預期結(jié)果有小數(shù)或分數(shù)部分也是如此 C#整數(shù)類型不同于數(shù)學上整數(shù)的另一點是∶int類型有最大限制和最小限制 int max = int.MaxValue; int min = int.MaxValue; Console.WriteLine($"The range of integer is {min} to {max}"); int what = max + 3; Console.WriteLine($"An example of overflow: {what}"); 整形包含有符號整形和無符號整形,有符號整形可以表達負數(shù),而無符號整形只能表達0和正數(shù) 3、使用雙精度類型 整數(shù)類型只能處理整數(shù),我們想要處理非整數(shù)的時候,必須引入浮點數(shù)概念 double a = 5; double b = 4; double c = 2 double d =(a + b)/c; Console.WriteLine(d); 因為double類型是浮點數(shù),所以使用整型的時候表現(xiàn)不出來了 雙精度類型的數(shù)值范圍遠大于整數(shù) double max = double.Maxvalue; double min = double.Minvalue; Console.WriteLine($"The range of double is {max} to {min}) E表示10的多少次方 4、使用十進制類型 它的范圍確實要比我們的整型要大很多;與數(shù)學上的十進制數(shù)值一樣,c#當中的雙精度值可能有四舍五入誤差 誤差從哪來 是因為我們存儲數(shù)據(jù)的空間是有限的,所以我們只能根據(jù)我們需要的精度來存儲它 double third = 1.0 / 3.0; Console.WriteLine(third); 3.33333333 這里的位數(shù)就是雙精度浮點數(shù)的精度 double third = 1 / 3; Console.WriteLine(third); 這樣做結(jié)果變成0 因為這一行語句,是先進行右側(cè)的運算,然后再把值賦給左側(cè),當數(shù)字寫成1的時候,默認這是一個int,而加上.0以后,它就變成一個double;所以無論是1÷3.0還是1.0÷3 四則運算當中,只要有一個浮點數(shù)參與,其結(jié)果就會變成浮點數(shù) double third = 1 / 3; 這個變量被定義為double類型,而右側(cè)運算結(jié)果是int類型,所以在賦值過程當中,類型發(fā)生了轉(zhuǎn)變 由int類型的0變成了double類型的0,這種轉(zhuǎn)換我們叫做隱式類型轉(zhuǎn)換 double third = 1 / 3; Console.WriteLine(third); 隱式類型轉(zhuǎn)換的前提是目標類型比原類型的精度要高,只能低精度轉(zhuǎn)到高精度,反過來則不行 double third = (int)(1.0 / 3); 這里之所以要打括號,是因為int轉(zhuǎn)換符;它的優(yōu)先級是高于乘除法的,所以我們要先運行這個除法就必須使用一個括號把它包起來,這樣的轉(zhuǎn)換就叫做顯示類型轉(zhuǎn)換 Console.WriteLine(third); 在一般.net的程序中,幾乎都是使用double類型浮點數(shù)進行運算,因為誤差會更小一些;unity呢因為性能考慮的是單精度浮點數(shù),也就是float float f = 1.0f / 3f; 在數(shù)字后面加上f表示這個數(shù)不是雙精度浮點數(shù),而是單精度浮點數(shù)float float f = 1.0f / 3f; double d = 1.0 / 3.0; Console.WriteLine(f); Console.WriteLine(f); Console.WriteLine($"float的范圍是{float.MinValue}到{float.MaxValue}"); Console.WriteLine($"double的范圍是{double.MinValue}到{double.MaxValue}"); 可以看到單精度浮點數(shù)float,它的精度比起雙精度要少一半,而且它的范圍也比雙精度浮點數(shù)要小很多;當然,存儲空間較小,它的性能比雙精度更高一些 整數(shù)和浮點數(shù),不管是雙精度還是單精度,它們都屬于基礎數(shù)字類型 十進制,也叫decimal:類型范圍較小,但進度比double高 decimal min = decimal.MinValue; decimal max = decimal.MaxValue; Console.WriteLine($"The range of the decimal type is {min} to {max}"); decimal c = 1.0M; decimal d = 3.0M; Console.WriteLine(c / d); decimal的數(shù)也需要在后面加上一個大寫的M作為后綴,可見它的精度要比雙精度要高很多 十進制類型不是基礎數(shù)字類型,其性能較低,更多的還是會使用double和float double r = 2.5; double area = Math.PI * r * r; Console.WriteLint($"area is {area}");