在整數(shù)類型中,int和long是最基本的類型兜叨。
在實數(shù)類型中潭千,float和double稱為浮點類型谱姓,并通常用于科學(xué)和圖形計算。
decimal類型通常用于金融計算刨晴。
static void Main(string[] args)
{
int a1 = 10;
long a2 = 0x7F; //0x前綴代表十六進(jìn)制
int a3 = 1_000_000; //C# 7開始屉来,可加入下劃線方便閱讀
var a4 = 0b1110_0011_1010; //0b前綴代表二進(jìn)制
//如果字面量包含小數(shù)點或者指數(shù)符號(E),編譯器默認(rèn)推斷為double
//否則狈癞,字面量的類型就是能滿足這個字面量的第一個類型:int茄靠、uint、long和ulong
Console.WriteLine(1.0.GetType()); //System.Double
Console.WriteLine(1E05.GetType()); //System.Double
Console.WriteLine(1.GetType()); //System.Int32
Console.WriteLine(0x100000000.GetType()); //System.Int64
//數(shù)值后綴
float b1 = 1.0F;
double b2 = 1D;
decimal b3 = 1.0M;
uint b4 = 1U;
long b5 = 1L;
ulong b6 = 1UL;
//數(shù)值轉(zhuǎn)換
int c1 = 123;
long c2 = c1; //隱式轉(zhuǎn)換
short c3 = (short)c1; //需顯式轉(zhuǎn)換
//所有整數(shù)類型可以隱式轉(zhuǎn)換為浮點數(shù)類型
int d1 = 3;
float d2 = d1;
//反之蝶桶,需顯式轉(zhuǎn)換
int d3 = (int)d2; //浮點數(shù)轉(zhuǎn)換為整數(shù)時慨绳,小數(shù)點后的數(shù)值將被截去而不會舍入
//注意丟失精度
int e1 = 100000001;
float e2 = e1; //丟失精度
int e3 = (int)e2;
Console.WriteLine(e3); //100000000
//自增和自減
int f1 = 0;
int f2 = 0;
Console.WriteLine(f1++); //0; f1++代表先賦值,再加1真竖; 這里先輸出0脐雪,再把f1加1
Console.WriteLine(f1); //1;
Console.WriteLine(++f2); //1; ++f2代表先加1,再賦值恢共; 這里先把f2加1战秋,再輸出,結(jié)果為1
Console.WriteLine(f2); //1;
//整數(shù)除法
int g1 = 2 / 3; //整數(shù)類型的除法運算總是會截斷余數(shù)
Console.WriteLine(g1); //0
int g2 = 0;
//int g3 = 3 / g2; //除數(shù)為0旁振,產(chǎn)生運行時錯誤(throws DivideByZeroException)
//整數(shù)溢出
int h1 = int.MinValue;
h1--;
Console.WriteLine(h1 == int.MaxValue); //True
//checked / unchecked
int i1 = 1000000;
int i2 = 1000000;
//int i3 = checked(i1 * i2); //checked運算符在運行時如溢出获询,拋出OverflowException涨岁,但對double拐袜、float吉嚣、decimal無效
int i4 = int.MaxValue;
int i5 = unchecked(i4 + 1); //使用unchecked不會拋出異常
unchecked { int i6 = i4 + 1; } //使用unchecked不會拋出異常
short j1 = 1, j2 = 1;
//short j3 = j1 + j2; //Compile-time error
short j4 = (short)(j1 + j2); //OK
Console.WriteLine(double.NegativeInfinity); //-Infinity
//非零值除以零的結(jié)果是無窮大
Console.WriteLine(1.0 / 0.0); //Infinity
Console.WriteLine(-1.0 / 0.0); //-Infinity
Console.WriteLine(1.0 / -0.0); //-Infinity
Console.WriteLine(-1.0 / -0.0); //Infinity
//零除以零或無窮大減去無窮大的結(jié)果是NaN
Console.WriteLine(0.0 / 0.0); //NaN
Console.WriteLine((1.0 / 0.0) - (1.0 / 0.0)); //NaN
//使用比較運算符==時,一個NaN值永遠(yuǎn)不等于其它的值蹬铺,也不等于其它的NaN值
Console.WriteLine(0.0 / 0.0 == double.NaN); //False
//但使用object.Equals方法時尝哆,兩個NaN卻是相等的
Console.WriteLine(object.Equals(0.0 / 0.0, double.NaN)); //True
//可使用float.IsNaN或double.IsNaN來判斷一個值是否為NaN
Console.WriteLine(double.IsNaN(0.0 / 0.0)); //True
}