C#中数据类型的基本了解
来源:互联网 发布:php生成二维码 编辑:程序博客网 时间:2024/05/18 00:24
bool -> System.Boolean (布尔型,其值为 true 或者 false)
byte -> System.Byte (字节型,占 1 字节,表示 8 位正整数,范围 0 ~ 255)
sbyte -> System.SByte (带符号字节型,占 1 字节,表示 8 位整数,范围 -128 ~ 127)
char -> System.Char (字符型,占有两个字节,表示 1 个 Unicode 字符)
short -> System.Int16 (短整型,占 2 字节,表示 16 位整数,范围 -32,768 ~ 32,767)
ushort -> System.UInt16 (无符号短整型,占 2 字节,表示 16 位正整数,范围 0 ~ 65,535)
uint -> System.UInt32 (无符号整型,占 4 字节,表示 32 位正整数,范围 0 ~ 4,294,967,295)
int -> System.Int32 (整型,占 4 字节,表示 32 位整数,范围 -2,147,483,648 到 2,147,483,647)
float -> System.Single (单精度浮点型,占 4 个字节)
ulong -> System.UInt64 (无符号长整型,占 8 字节,表示 64 位正整数,范围 0 ~ 大约 10 的 20 次方)
long -> System.Int64 (长整型,占 8 字节,表示 64 位整数,范围大约 -(10 的 19) 次方 到 10 的 19 次方)
double -> System.Double (双精度浮点型,占8 个字节)
.int和System.Int32的关系
下图是我从微软官方介绍里截取的,我们先简单看一下.Net Framework的架构:
.Net Framework是一个基础平台,它要支持建立在此基础上的各种语言,以及跨语言程序之间的通信。如图:
由于上述原因,.Net Framework对外提供的资源必须是通用的,并且避免使用某种语言的特有称呼,以免造成不必要的混淆。
于是,这就有了int和System.Int32,它们的关系如下图:
System.Int32是.Net Framework对32位整数的标识,MSDN对这种类型标示的称呼是User Type。而int则是c#语言里面的特有称呼(这里它对应的.Net Framework里的System.Int32),MSDN对c#的int的称呼是Keyword。int就是System.Int32的别名而已!
那为什么我们在用Reflector反编译mscorlib.dll的时候,会得出第一幅图那种结果呢?
是这样的,在.Net Framework运行库里,有一种最基础的数据类型,叫“基元类型(primitive)”。这种数据类型是只提供给.Net Framework内部使用,外面是看不见的。其实在真正微软的System.Int32的源码中,用到的应该是int32。但是由于int32不是c#提供的类型,所以Reflector会自动把int32逆向为c#的int,这也就是为什么我们会在System.Int32定义中看到int的存在了。
这里我引用Dixin文章里的一段IL代码证明int32的存在:>
C#代码:
public int TestMethod(int value){ return value * 2;}
对应得IL代码:
.method public hidebysig instance int32 TestMethod(int32 'value') cil managed{ .maxstack 2 .locals init ( [0] int32 CS$1$0000) L_0000: nop L_0001: ldarg.1 L_0002: ldc.i4.2 L_0003: mul L_0004: stloc.0 L_0005: br.s L_0007 L_0007: ldloc.0 L_0008: ret }
想了解更多的关于“基元类型”的资料,可以参考这篇文章《认识基元类型、FCL类型及与CLR的相容情况》。
三.System.Int32在64位机器上
System.Int32在64位机器上还是表示32位的整数,也就是说C#的int在64位机器上也还是表示32位的整数。至于为什么,看下图:
如果System.Int32在64位机器为64bit,那么,这将会使在32位机器上的C#程序难以和64位上的C#程序沟通,试想一下,要把64bit的数据塞进32bit的空间中是一件多恶心的事情啊!所以,System.Int32在64位机器还是表示32位的长度,是很合理的。
- C#中数据类型的基本了解
- c#的基本数据类型
- C# 8中基本数据类型的可空值类型
- C#基本语法 - 基本的数据类型
- 汇编中基本的数据类型
- 汇编中基本的数据类型
- C#基本环境了解
- C#基础-----基本了解
- C#中数据类型的分类
- C#中数据类型的转换
- C#中数据类型的托管
- C#中数据类型的区别
- C#中数据类型的分类
- C#基本数据类型
- C#中的基本数据类型
- C# 基本数据类型
- C#基本数据类型
- c#基本数据类型
- ViewPager和Tabhost(tabhostfragment)结合
- h264解码时的AVCDecoderConfigurationRecord 与 CodecPrivateData
- 类的两个属性具有相同名称
- 奇偶排序Odd-even sort
- hadoop 2.6 NetworkTopology源代码分析
- C#中数据类型的基本了解
- Windows 已在xxx.exe中触发了一个断点
- vim 常用快捷键
- 关系型数据库和非关系型数据库
- 深入android6.0 设备 idle状态
- 使用Xcode HeaderDoc和Doxygen文档化你的Objective-C和Swift代码
- 输出内存数据的二进制和十六进制的字符串表示
- ACdream1099 分治思想+快排优化+读入优化
- openVPN 打通IDC机房与公司内网