1. 程式人生 > >C#中int short Int16 Int32 Int64區別

C#中int short Int16 Int32 Int64區別

Java中沒有Int32,Int64,,java中只有int,short,long

Java中int就代表Int32 ,short就代表Int16,long就代表Int64

首先,幾個基本的關鍵字:

Int16 = short, 佔2個位元組. -32768 ~ 32767

Int32 = int, 佔4個位元組. -2147483648 ~ 2147483647

Int64 = long, 佔8個位元組. -9223372036854775808 ~ 9223372036854775807

 

這樣, 看起來比short,int,long更加直觀些

MSDN中說int就是Int32的別名,是等價的,short,long同理也是別名

 

詳解Int32

為什麼Int32 就等於 int, 很簡單,在VS中寫 int a=1;  選中a , F12轉到定義就是System.Int32.

 

Int32就是代表一共能儲存2^32次方,一共有42,9496,7296個數

從-21,4748,3648 到 +21,4748,3647 為止,為什麼正數比負數小一個數,因為0佔了一個數

所以Int32的最大數並不是42,9496,7296,而是(2^31)-1=+21,4748,3647,為什麼是31次方,因為是有符號整型,最高位要空出來判斷是不是負數,所以是31次方,-1是因為0佔了一個數。

但是一共還是能儲存2^32次方 既42,9496,7296個數,因為有正負數,其實一樣的,還是2的32次方個數

如圖:

所以Int16和Int64也是同理的。只不過是把2^32換成2^16或者2^64而已....

 

無符號整形Uint32

上面說的都是有符號整數,既signed integer, 就是可以儲存正負數的,而無符號整數就是隻能儲存正數,既unsigned integer

在C#中用Uint16,UInt32,Uint64等表示

跟上面同理

ushort =UInt16 

uint =UInt32   ,0 ~ 4364967295

ulong =UInt64

 

UInt32和Int32一樣 ,也是代表一共能儲存2^32次方,一共有42,9496,7296個數

但是因為只有正數和0,所以最大值為4364967295, 既2^32-1,-1是因為0佔了一個數


 

溢位會如何

更進一步,嘗試Int32 a=Int32.MaxValue+1 , 會不會報錯?

答案是不會,至少在VS中不會,編譯器會自動把a賦值成-21,4748,3648,既最小數值,若加2,則為-21,4748,3647,依次遞加。。。

同理,UInt32 a=UInt32.MaxValue+1 ,a就是0,既,若+2,a=1,依次遞加。。。

 

https://www.cnblogs.com/EEEE1/p/8098876.html

https://www.cnblogs.com/raytheweak/p/7290617.html