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