天天看點

再看.NET7——數值類型

作者:桂素偉

在C#中,有int16,用short來定義;有int32,用int定義;用int64,用long來定義。在.NET7中,添加了int128,和unint128,位數更大的整型。

var i16 = short.MaxValue;
Console.WriteLine(#34;Int16(short):{i16}");
var i32 = int.MaxValue;
Console.WriteLine(#34;Int32(int):{i32}");
var i64 = long.MaxValue;
Console.WriteLine(#34;Int64(long):{i64}");
var i128 = Int128.MaxValue;
Console.WriteLine(#34;Int128(nint):{i128}");           

運作結果如下:

再看.NET7——數值類型

這是四種整型的最大值,如下圖,長度越來越長。我在想,如果想,是否有比這一個比這更長的呢?在C#中,還真有,那就是BigInterger類型。

做了一個實作,取Int128的最大值,加上1,看看BigInter的表現,發現是負值,不科學呀,這明顯是越出範圍了,再回頭一想,可不是嗎,=号左邊是按Int128類型進行計算的,算完後的結果再指派給BigInteger,肯定不正确。

BigInteger bi = Int128.MaxValue + 1;
Console.WriteLine(bi);
//輸出結果是 //-170141183460469231731687303715884105728           

下面是25個Int128最大值相乘的結果:

BigInteger bi = Int128.MaxValue;
Console.WriteLine(bi * bi * bi * bi * bi * bi * bi * bi * bi * bi * bi * bi * bi * bi * bi * bi * bi * bi * bi * bi * bi * bi * bi * bi * bi);           

結果有點壯觀,這裡不是湊字數,隻是為了展現這個BigInteger真的是Big。

58916404216961979676909042591987947822359513725557205849149542555007692652347381264636907638253647314262850348235426824312868335375923591974778384825147349073463542641219884491858801121852450747293521207624100878094057158371253020749844894622137275848581525103728983399170867363637009921601295586614986927881247817386641170766685289471008770749268484605197710958804904735795192578092441774416789002857630151605320763562597782346561384317187923574742179610656057122932294986320480310202786926147268988027802165835084551052581664662548315426718440303766210682391833223357482334422560789744394872838038735794130736180567547347803910439868126971229865036834997854634982160372133268191831626580300194293142529507929212993242469682465540748803280832612453265211011403601272300450012493433025656806407894868992349543408694552546581050551449691803479528787515077512618351797659200540297508115576736370164059967042268186433173185465139879902310589995579447923703807

下面是C#中常見的數值類型。

Console.WriteLine(#34;short max:{short.MaxValue}");
Console.WriteLine(#34;short min:{short.MinValue}");
short s = 123;
Console.WriteLine(#34;short值:{s},占{Marshal.SizeOf(s)}位元組");
Console.WriteLine("----------------------------------");


Console.WriteLine(#34;int max:{int.MaxValue}");
Console.WriteLine(#34;int min:{int.MinValue}");
int i = 123;
Console.WriteLine(#34;int值:{i},占{Marshal.SizeOf(i)}位元組");
Console.WriteLine("----------------------------------");


Console.WriteLine(#34;nint max:{nint.MaxValue}");
Console.WriteLine(#34;nint min:{nint.MinValue}");
nint n = 123;
Console.WriteLine(#34;nint值:{n},占{Marshal.SizeOf(n)}位元組");
Console.WriteLine("----------------------------------");


Console.WriteLine(#34;long max:{long.MaxValue}");
Console.WriteLine(#34;long min:{long.MinValue}");
long l = 123;
Console.WriteLine(#34;long值:{l},占{Marshal.SizeOf(l)}位元組");
Console.WriteLine("----------------------------------");


Console.WriteLine(#34;Int128 max:{Int128.MaxValue}");
Console.WriteLine(#34;Int128 min:{Int128.MinValue}");
Int128 i128 = 123;
Console.WriteLine(#34;Int128值:{i128},占{Marshal.SizeOf(i128)}位元組");
Console.WriteLine("----------------------------------");


Console.WriteLine(#34;Half max:{Half.MaxValue}");
Console.WriteLine(#34;Half min:{Half.MinValue}");
Half h = (Half)43210.123456789;
Console.WriteLine(#34;Half值:{h},占{Marshal.SizeOf(h)}位元組");
Console.WriteLine("----------------------------------");


Console.WriteLine(#34;float max:{float.MaxValue}");
Console.WriteLine(#34;float min:{float.MinValue}");
float f = 0.123456789f;
Console.WriteLine(#34;float值:{f},占{Marshal.SizeOf(f)}位元組");
Console.WriteLine("----------------------------------");


Console.WriteLine(#34;double max:{double.MaxValue}");
Console.WriteLine(#34;double min:{double.MinValue}");
double d = 0.123456789012345678d;
Console.WriteLine(#34;double值:{d},占{Marshal.SizeOf(d)}位元組");


Console.WriteLine("----------------------------------");


Console.WriteLine(#34;decimal max:{decimal.MaxValue}");
Console.WriteLine(#34;decimal min:{decimal.MinValue}");
var m = 0.12345678901234567890123456m;
Console.WriteLine(#34;decimal值:{m},占{Marshal.SizeOf(m)}位元組");
Console.WriteLine("----------------------------------");           

運作結果:

再看.NET7——數值類型

繼續閱讀