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

 

posted @ 2018-10-16 16:05  birdhumen鸟人  阅读(4425)  评论(0编辑  收藏  举报