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 位 |
默认情况下,赋值运算符右侧的实数被视为 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 位 |
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 位有效位 |
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) 收藏 举报
浙公网安备 33010602011771号