int32,int64的别名

时间:2011-03-22 15:56:32

标签: c#

class Program
{
   static void Main(string[] args)
   {
       Int64 a = Int64.MaxValue;
       Int64 b= Int64.MinValue;

       try
       {
          checked
          {
             Int64 m = a * b;

          }
       }
       catch (OverflowException ex)
       {
          Console.WriteLine("over flow exception");
          Console.Read();
       }
   }
}

如果变量声明为int,我收到编译错误,转换是从int到long的requreid。

  1. 为什么我收到此错误,虽然我使用的是int。
  2. 别名Int32Int64
  3. 是什么
  4. 何时使用Int32Int64,是否依赖于操作系统?

6 个答案:

答案 0 :(得分:5)

Int32对应intInt64对应long。对于大多数一般用途,您可以使用32位整数;但是,如果您需要非常大的数字,请使用long整数(64位)。

当您将Int64.MaxValue分配给int时,您隐含地将longInt64)转换为intInt32 ),这不起作用。此外,该值太大而不适合32位整数。

答案 1 :(得分:1)

Int32 = int
Int64 = long

CTS实现保证了在任何CPU / OS上都可以移植的类型。

答案 2 :(得分:1)

答案 3 :(得分:0)

  

什么是别名Int32和Int64

Int32的别名是intInt64的别名为long

  

何时使用Int32和Int64,它是否依赖于操作系统?

是否使用Int32或Int64取决于应用程序(范围,符号要求)。不,它 NOT 取决于操作系统。只要涉及.NET框架,int将始终是4字节长的Int32。还请注意别名是编译器的一个功能。因此,当您使用C#进行编程时,long确实有意义,但考虑那些不需要像Array.LongLength这样的属性名称的VB.NET开发人员,因为long对他们没有意义。

答案 4 :(得分:0)

1)如果你到处使用int,你不应该得到这个错误。以下工作正常:

using System;

class Program
{
    static void Main(string[] args)
    {
        int a = int.MaxValue;
        int b = int.MinValue;

        try
        {
            checked
            {
                int m = a * b;

            }
        }
        catch (OverflowException ex)
        {
            Console.WriteLine("over flow exception");
            Console.Read();

        }
    }
}

2)Int32使用int别名,Int64使用long别名

3)这不是特定于平台的,而是由C#规范定义的。在所有平台上都是一样的。需要32位整数时使用Int32(或int),需要64位整数时使用Int64(或long)。这更像是一种逻辑/算法决策,而不是与平台相关的决策。

答案 5 :(得分:0)

System.Int32System.Int64是CLI标准(ECMA-335)定义的类型。它们基本上是32位和64位整数类型的CLR /框架版本,并且保证可移植。

某些语言(如C#)定义了这些类型的别名 - C#定义intSystem.Int32相同,longSystem.Int64相同 - - 因此这些类型也是便携式的。

至于你使用的是什么(CLR版本与语言版本,至少),它基本上是一种风格问题,特别是如果你只使用一种语言。我个人更喜欢在可能的情况下为CLR类型使用语言指定的别名。