李晓亮的博客

导航

C#中的值类型(C#基础知识摘录)

1.C#值类型:bool byte char decimal double enum float int long sbyte short struct uint ulong ushort
2.值类型主要由两类组成:结构 枚举

   2.1 结构分为以下几类:
        1)Numeric(数值)类型 
        2)整型
        3)浮点型 decimal bool
        4)用户定义的结构。
   2.2 值类型的主要功能
        基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
        所有的值类型均隐式派生自 System.ValueType

        与引用类型不同,从值类型不可能派生出新的类型。但与引用类型相同的是,结构也可以实现接口。

        与引用类型不同,值类型不可能包含 null 值。然而,可空类型功能允许将 null 赋给值类型。

        每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。有关值类型默认值的信息,请参见默认值表
  2.3 简单类型的主要功能
        所有的简单类型(C# 语言的组成部分)均为 .NET Framework 系统类型的别名。例如,int 是 System.Int32 的别名。有关完整的别名列表,请参见内置类型表(C# 参考)。。
        编译时计算操作数均为简单类型常数的常数表达式。
        可使用文字初始化简单类型。例如,“A”是 char 类型的文字,而 2001 是 int 类型的文字。

  2.4 初始化值类型
        C# 中的局部变量经初始化后方可使用。因此,如果像下面这样声明了一个局部变量而未将其初始化:
        int myInt;

        那么在将其初始化之前,无法使用此变量。可使用下列语句将其初始化:
        myInt = new int();  // Invoke default constructor for int type.
        此语句等效于:
        myInt = 0;         // Assign an initial value, 0 in this example.

        当然,可以像下面这样用同一个语句进行声明和初始化:
        int myInt = new int();
        - 或 -
        int myInt = 0;

        使用 new 运算符时,将调用特定类型的默认构造函数并对变量赋以默认值。在上例中,默认构造函数将值 0 赋给了 myInt。有关通过调用默认构造函数所赋的值的更多信息,请参见默认值表。
        对于用户定义的类型,使用 new 来调用默认构造函数。例如,下列语句调用了 Point 结构的默认构造函数:
        Point p = new Point(); // Invoke default constructor for the struct.
        此调用后,该结构被认为已被明确赋值;也就是说该结构的所有成员均已初始化为各自的默认值。

 3.float 关键字表示存储 32 位浮点值的简单类型。下表显示了 float 类型的精度和大致范围。

类型 大致范围 精度 .NET Framework 类型

float

±1.5 × 10-45 到 ±3.4 × 1038

7 位

System.Single

  3.1 标识符
        默认情况下,赋值运算符右侧的实数被视为 double。因此,应使用后缀 f 或 F 初始化浮点型变量,如下所示:
        float x = 3.5F;
        如果在以上声明中不使用后缀,则会因为您试图将一个 double 值存储到 float 变量中而发生编译错误。

  3.2 转换

        可在一个表达式中兼用数值整型和浮点型。在此情况下,整型将转换为浮点型。根据以下规则计算表达式:
        如果其中一个浮点型为 double,则表达式的计算结果为 double 类型,在关系表达式或布尔表达式中为 bool 类型。
        如果表达式中不存在 double 类型,则表达式的计算结果为 float 类型,在关系表达式或布尔表达式中为 bool 类型。
        浮点表达式可以包含下列值集:
         1)正零和负零
         2)正无穷和负无穷
         3)非数字值 (NaN)
         4)有限的非零值集
         有关这些值的更多信息,请参考“二进制浮点算法的 IEEE 标准”,该标准可在网站 http://www.ieee.org/ 上获得。

  3.3 示例
        在下面的示例中,包含 int、short 和 float 类型的数学表达式得到一个 float 结果。请注意,表达式中没有double。
        // keyword_float.cs
        // Mixing types in expressions
        using System;
        class MixedTypes
        {
            static void Main() 
            {
               int x = 3;
                float y = 4.5f;
                short z = 5;
                Console.WriteLine("The result is {0}", x * y / z);
            }
        }

 4.double 关键字表示存储 64 位浮点值的简单类型。下表显示了 double 类型的精度和大致范围。

类型 大致范围 精度 .NET Framework 类型

double

±5.0 × 10-324 到 ±1.7 × 10308

15 到 16 位

System.Double

  4.1 标识符
       默认情况下,赋值运算符右侧的实数被视为 double。但是,如果希望整数被视为 double,请使用后缀 d 或 D,例如:
        double x = 3D;

  4.2 转换
        可在一个表达式中兼用数值整型和浮点型。在此情况下,整型将转换为浮点型。根据以下规则计算表达式:
        如果其中一个浮点类型为 double,则表达式的计算结果为 double 或 bool(对于关系表达式或布尔表达式)。
        如果表达式中不存在 double 类型,则表达式的计算结果为 float 类型,在关系表达式或布尔表达式中为 bool 类型。
        浮点表达式可以包含下列值集:
        1)正零和负零。
        2)正无穷和负无穷。
        3)非数字值 (NaN)。
        4)有限的非零值集。
        有关这些值的更多信息,请参考“二进制浮点运算的 IEEE 标准”,该标准可在网站 http://www.ieee.org/portal/index.jsp 上获得。
  4.3 示例
        在下面的示例中,一个 int、一个 short、一个 float 和一个 double 相加,计算结果为 double 类型。
       // keyword_double.cs
       // Mixing types in expressions
       using System;
       class MixedTypes
       {
           static void Main() 
           {
               int x = 3;
               float y = 4.5f;
               short z = 5;
               double w = 1.7E+3;
               // Result of the 2nd argument is a double:
               Console.WriteLine("The sum is {0}", x + y + z + w);
           }
       }

5.decimal 关键字表示 128 位数据类型。同浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。decimal 类型的大致范围和精度如下表所示。

类型 大致范围 精度 .NET Framework 类型

decimal

±1.0 × 10-28 到 ±7.9 × 1028

28 到 29 位有效位

System.Decimal


  5.1 标识符 

      如果希望实数被视为 decimal 类型,请使用后缀 m 或 M,例如:
        decimal myMoney = 300.5m;
      如果没有后缀 m,数字将被视为 double 类型,从而导致编译器错误。

  5.2 转换
      整型被隐式转换为 decimal,其计算结果为 decimal。因此,可以用整数初始化十进制变量而不使用后缀,如下所示:
        decimal myMoney = 300;
      在浮点型和 decimal 类型之间不存在隐式转换;因此,必须使用强制转换在这两种类型之间进行转换。例如:
        decimal myMoney = 99.9m;
        double x = (double)myMoney;
        myMoney = (decimal)x;
      还可以在同一表达式中混合使用 decimal 和数值整型。但是,不进行强制转换就混合使用 decimal 和浮点型将导致编译错误。
      有关隐式数值转换的更多信息,请参见隐式数值转换表(C# 参考)。
      有关显式数值转换的更多信息,请参见显式数值转换表(C# 参考)。

  5.3 格式化十进制输出
      可以通过使用 String.Format 方法或 System.Console.Write 方法(它调用 String.Format())来格式化结果。指定货币格式时需要使用标准货币格式字符串“C”或“c”,如示例 2 所示。有关 String.Format 方法的更多信息,请参见 System.String.Format(System.String,System.Object)。

  5.4 示例
      在此例中,同一个表达式中混合使用了 decimal 和 int。计算结果为 decimal 类型。
      如果试图使用下面这样的语句添加 double 和 decimal 变量:
      double x = 9;
      Console.WriteLine(d + x); // Error

      将导致下列错误:
      Operator '+' cannot be applied to operands of type 'double' and 'decimal'

      // keyword_decimal.cs
      // decimal conversion
      using System;
      public class TestDecimal
      {
          static void Main ()
          {
              decimal d = 9.1m;
              int y = 3;
              Console.WriteLine(d + y);   // Result converted to decimal
          }
      }

      输出
      12.1
      在此例中,输出用货币格式字符串格式化。注意:其中 x 被舍入,因为其小数点位置超出了 $0.99。而表示最大精确位数的变量 y 严格按照正确的格式显示。

      // keyword_decimal2.cs
      // Decimal type formatting
      using System;
      public class TestDecimalFormat
      {
          static void Main ()
          {
              decimal x = 0.999m;
              decimal y = 9999999999999999999999999999m;
              Console.WriteLine("My amount = {0:C}", x);
              Console.WriteLine("Your amount = {0:C}", y);
          }
      }

      输出
      My amount = $1.00
      Your amount = $9,999,999,999,999,999,999,999,999,999.00
摘自:

1)http://msdn.microsoft.com/zh-cn/library/s1ax56ch(v=VS.80).aspx
2)http://msdn.microsoft.com/zh-cn/library/b1e65aza(v=VS.80).aspx

3)http://msdn.microsoft.com/zh-cn/library/678hzkk9(v=VS.80).aspx

4)http://msdn.microsoft.com/zh-cn/library/364x0z75(VS.80).aspx

posted on 2011-04-18 12:43  LeeXiaoLiang  阅读(878)  评论(0)    收藏  举报