【问题标题】:alias for int32,int64int32,int64 的别名
【发布时间】:2011-03-23 00:04:07
【问题描述】:
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。

  1. 为什么我使用 int 时会出现此错误。
  2. 别名Int32Int64是什么
  3. 何时使用Int32Int64,是否取决于操作系统?

【问题讨论】:

标签: c#


【解决方案1】:

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

当您将Int64.MaxValue 分配给int 时,您正在隐式地将long (Int64) 转换为int (Int32),这不起作用。此外,该值太大,无法容纳 32 位整数。

【讨论】:

    【解决方案2】:
    Int32 = int
    Int64 = long
    

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

    【讨论】:

      【解决方案3】:

      【讨论】:

        【解决方案4】:

        Int32 和 Int64 的别名是什么

        Int32 的别名是intInt64 的别名是 long

        何时使用 Int32 和 Int64,是否取决于操作系统?

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

        【讨论】:

          【解决方案5】:

          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)。这更像是一个逻辑/算法决定,而不是与平台相关的决定。

          【讨论】:

          • 程序运行时会出现运行时错误。如果 make a 和 b 有常量,我会得到编译错误。为什么会有这样的差异
          • @Raghav:编译器可以帮助处理常量——没有常量,你会得到一个运行时错误。编译器可以提供帮助,但不能总是做所有事情。将编译器错误视为“有用的补充”
          【解决方案6】:

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

          某些语言,如 C#,为这些类型定义别名——C# 定义 intSystem.Int32 相同,longSystem.Int64 相同——因此这些类型也是可移植的。

          至于您使用的是哪种语言(至少是 CLR 版本与语言版本),这在很大程度上是一种风格问题,尤其是在您只使用一种语言的情况下。我个人更喜欢尽可能为 CLR 类型使用语言指定的别名。

          【讨论】:

            猜你喜欢
            • 2018-02-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-03-15
            • 2021-08-18
            • 1970-01-01
            • 1970-01-01
            • 2010-12-13
            相关资源
            最近更新 更多