)
值類型int / double / decimal / bool / char值類型的共同特征數(shù)據(jù)直接存在變量所在的位置賦值就是復(fù)制一份。這一節(jié)重點(diǎn)是五個(gè)常用類型各自的行為差異。完整數(shù)值類型表類型位數(shù)范圍字面量后綴用途byte80 到 255無二進(jìn)制、IO、文件字節(jié)sbyte8-128 到 127無少用short16-32768 到 32767無少用ushort160 到 65535無少用int32約 -21 億到 21 億無默認(rèn)默認(rèn)整數(shù)類型uint320 到約 42 億u少用long64極大L大整數(shù)、時(shí)間戳ulong64極大ul少用float32約 7 位有效數(shù)字f少用精度低double64約 15 到 16 位有效數(shù)字無默認(rèn)默認(rèn)浮點(diǎn)類型decimal12828 到 29 位有效數(shù)字m金額、財(cái)務(wù)bool—true / false無判斷char16單個(gè) Unicode 字符無字符int count 100; // 整數(shù)字面量默認(rèn)就是 int long big 9999999999L; // 超出 int 范圍必須加 L否則編譯報(bào)錯(cuò) float f 3.14f; // 小數(shù)字面量默認(rèn)是 double給 float 必須加 f double d 3.14; decimal money 19.99m; // 金額必須加 m bool isOk true; char c A; // 單引號(hào)只能一個(gè)字符int整數(shù)除法會(huì)截?cái)噙@是新手第一個(gè)坑int a 7; int b 2; Console.WriteLine(a / b); // 3 整數(shù)除整數(shù)小數(shù)部分直接砍掉 Console.WriteLine(a % b); // 1 取余 double r1 (double)a / b; // 3.5 把其中一邊轉(zhuǎn)成浮點(diǎn)結(jié)果才是浮點(diǎn) double r2 a / (double)b; // 3.5 轉(zhuǎn)哪邊都行規(guī)則兩邊都是整數(shù)結(jié)果就是整數(shù)截?cái)嘀灰幸贿吺歉↑c(diǎn)結(jié)果才是浮點(diǎn)。double有精度誤差不能用來比相等double x 0.1 0.2; Console.WriteLine(x); // 0.30000000000000004 Console.WriteLine(x 0.3); // False ← 看起來相等實(shí)際不等 decimal y 0.1m 0.2m; Console.WriteLine(y); // 0.3 Console.WriteLine(y 0.3m); // True原因double用二進(jìn)制存小數(shù)而 0.1 在二進(jìn)制里是無限循環(huán)的像十進(jìn)制里 1/3 0.333... 永遠(yuǎn)寫不完所以存進(jìn)去就有微小誤差。decimal內(nèi)部按十進(jìn)制存0.1 就是精確的 0.1。規(guī)則涉及錢的計(jì)算一律用decimaldouble只用于科學(xué)計(jì)算、圖形坐標(biāo)這類允許誤差的場(chǎng)景。decimal精度高但慢decimal price 19.99m; decimal quantity 3m; decimal total price * quantity; // 59.97精確 // 和 double 混合運(yùn)算會(huì)編譯報(bào)錯(cuò)必須顯式轉(zhuǎn)換 double dd 1.5; decimal mix price (decimal)dd; // 要手動(dòng)轉(zhuǎn)bool只有 true / false不能和數(shù)字互轉(zhuǎn)bool flag true; // int n (int)flag; // ? 編譯報(bào)錯(cuò) // bool b2 (bool)1; // ? 編譯報(bào)錯(cuò)這點(diǎn)和 C / JavaScript 不同。C# 里if (1)是編譯錯(cuò)誤必須寫if (true)或一個(gè) bool 表達(dá)式。char本質(zhì)是 16 位整數(shù)char c1 A; char c2 \n; // 轉(zhuǎn)義換行 char c3 \t; // 轉(zhuǎn)義制表符 char c4 \\; // 反斜杠本身 char c5 \; // 單引號(hào)本身 char c6 ; // 雙引號(hào)在字符里不用轉(zhuǎn)義 Console.WriteLine((int)c1); // 65 char 可以當(dāng)數(shù)字用 char c7 (char)66; Console.WriteLine(c7); // B // 字符比較實(shí)際是在比數(shù)字 Console.WriteLine(a A); // True因?yàn)?97 65