C# int、Int16、Int32和Int64之间的区别是什么?

C# int、Int16、Int32和Int64之间的区别是什么?,c#,.net,C#,.net,int、System.Int16、System.Int32和System.Int64之间除了尺寸之外还有什么区别。类型之间唯一的区别是它们的大小(以及它们可以表示的值的范围)。这里唯一真正的区别是大小。这里所有的int类型都是大小不同的有符号整数值 Int16:2字节 Int32和int:4字节 Int64:8字节 Int64和其他部分之间有一个小的区别。在32位平台上,对Int64存储位置的分配不保证是原子的。对于所有其他类型,它都是有保证的 int和int32是一个相同的(32位整数)

int
System.Int16
System.Int32
System.Int64
之间除了尺寸之外还有什么区别。类型之间唯一的区别是它们的大小(以及它们可以表示的值的范围)。

这里唯一真正的区别是大小。这里所有的int类型都是大小不同的有符号整数值

  • Int16
    :2字节
  • Int32
    int
    :4字节
  • Int64
    :8字节
Int64
和其他部分之间有一个小的区别。在32位平台上,对
Int64
存储位置的分配不保证是原子的。对于所有其他类型,它都是有保证的

  • int
    int32
    是一个相同的(32位整数)
  • int16
    是短int(2字节或16位)
  • int64
    是长数据类型(8字节或64位)

  • 编辑:对于C#来说,情况并非如此,我在回答这个问题时遗漏了一个标签——如果有更具体的C#答案,请投赞成票


    它们都表示大小不同的整数

    然而,有一个非常非常微小的区别

    int16、int32和int64都有固定的大小


    int的大小取决于您编译的体系结构-C规范只将int定义为大于或等于一个短值,但实际上它是您目标处理器的宽度,可能是32位,但您应该知道它可能不是。

    每种类型的整数都有不同的存储容量范围

       Type      Capacity
    
       Int16 -- (-32,768 to +32,767)
    
       Int32 -- (-2,147,483,648 to +2,147,483,647)
    
       Int64 -- (-9,223,372,036,854,775,808 to +9,223,372,036,854,775,807)
    
    正如James Sutherland在以下文件中所述:

    int
    Int32
    确实是同义词<代码>整数会多一点 熟悉的外观,
    Int32
    使32位对那些 阅读你的代码。我倾向于在我需要的地方使用int “一个整数,
    Int32
    ,其中大小很重要(密码, 因此,未来的维护人员将知道扩大
    int
    如果合适,但应注意更改
    Int32
    变量 以同样的方式

    生成的代码将是相同的:差异纯粹是其中之一 可读性或代码外观

    Int=Int32-->原始长类型 Int16-->原始整数 Int64-->新数据类型在64位系统之后可用 “int”仅用于向后兼容。我们应该真正使用新的int类型,使我们的程序更精确。 ---------------

    在此过程中,我还注意到没有一个类名为
    Int
    类似于Int16、Int32和Int64。整数的所有有用函数,如
    TryParse
    ,都来自
    Int32.TryParse


    根据Jeffrey Richter(.NET framework开发的贡献者之一)的书《通过C#实现CLR》:

    int是C#编译器允许的一种基本类型,而Int32是框架类库类型(适用于遵守CLS的语言)。事实上,int在编译期间转换为Int32

    而且

    在C#中,long映射到System.Int64,但在不同的编程中 语言,long可以映射到Int16或Int32。事实上,C++/CLI确实如此 长按Int32处理

    事实上,大多数(.NET)语言甚至不会将long视为关键字,也不会 编译使用它的代码


    我见过这位作者,以及许多关于.NET的标准文献,他们更喜欢FCL类型(即Int32)而不是特定于语言的基元类型(即int),主要是关于这种互操作性问题。

    关于16、32和64类型的一个非常重要的注意事项:

    如果运行此查询。。。 Array.IndexOf(新的Int16[]{1,2,3},1)

    你应该得到零(0),因为你在问。。。在1、2或3的数组中为1。 如果答案为-1,则表示1不在1、2或3的数组中

    那么看看我发现了什么: 以下所有内容应为0,而不是-1 (我已经在所有的框架版本2.0、3.0、3.5、4.0中测试了这一点)

    C#:

    VB.NET:

    Array.IndexOf(new Int16(){1,2,3}, 1) = -1 (not correct)
    Array.IndexOf(new Int32(){1,2,3}, 1) = 0 (correct)
    Array.IndexOf(new Int64(){1,2,3}, 1) = -1 (not correct)
    
    所以我的观点是,对于Array.IndexOf比较,只信任Int32

    int

    它是C#中定义的基本数据类型

    它被映射到FCL类型的Int32

    它是一种值类型,表示System.Int32结构

    它是有符号的,需要32位

    它的最小值为-2147483648,最大值为+2147483647

    Int16

    它是FCL类型

    在C#中,short映射到Int16

    它是一种值类型,表示System.Int16结构

    它是有符号的,需要16位

    它的最小值为-32768,最大值为+32767

    Int32

    它是FCL类型

    在C#中,int映射到Int32

    它是一种值类型,表示System.Int32结构

    它是有符号的,需要32位

    它的最小值为-2147483648,最大值为+2147483647

    Int64

    它是FCL类型

    在C#中,long映射到Int64

    它是一种值类型,表示System.Int64结构

    它是有符号的,需要64位


    它的最小值为9223372036854775808,最大值为9223372036854775807。

    它们确实是同义词,但我发现它们之间的差别很小

    1) 创建
    enum

    enum Test : Int32
    { XXX = 1   // gives you compilation error
    }
    
    enum Test : int
    { XXX = 1   // Works fine
    }
    

    2)
    Int32
    属于系统声明。如果使用.System删除
    ,则会出现编译错误,但在
    int
    的情况下不会出现编译错误,因为它们会告诉整数变量中可以存储的大小。要记住大小,您可以考虑:-)2啤酒(2字节)、4啤酒(4字节)或8啤酒(8字节)

    • Int16:-2啤酒/字节=16位=2^16=65
      enum Test : Int32
      { XXX = 1   // gives you compilation error
      }
      
      enum Test : int
      { XXX = 1   // Works fine
      }