一天一小步_我学C#入门精典_第五天

第五章 变量的更多内容

  •  枚举-变量类型,用户定义了一级可能的数值,这些数值可以用人类能理解的方式使用。
  • 结构-合成的变量类型,由用户定义的一组其他变量类型组成。
  • 数组-包含一种类型的多个变量,可以用下标全工作更容易完成。

1,类型转换

类型转换有两种形式:

  • 隐式转换:从类型A到类型B的转换可以在所有的情况下进行,执行转换的规则非常简单,可以让编译器进行。
  • 显式转换:从类型A到类型B的转换只能在某些情况下进行转换的规则比较复杂,应进行某种类型的处理。

(1)隐式转换

示例:ushort和char的值是可以互换的,因为它们都可以存储0~65535之间的数字,在这两个类型之间可以进行隐式转换,例如下面的代码:


ushort  destinationVar;
char  sourceVar  =   ' a ' ;
destinationVar 
=  sourceVar;
Console.WriteLine(
" sourceVar val: {0} " , sourceVar);
Console.WriteLine(
" destinationVar val: {0} " , destinationVar);

 这里存储在sourceVar中的值 放在destinationVar中。

输出结果:

sourceVar val: a

destinationVar val:97

即使两个变量存储的是相同的信息,使用不同的类型解释它们时,方式也是不相同的。

简单类型有许多隐式转换:bool和string没有隐式转换,但数值类型有一些隐式转换。

下表列出了编译器可以隐式执行的数值转换(char存储的是数值,所以char被当作一个数值类型)。


 类型         可以安全的转换为

byte         short,ushort,int uint ,long,ulong,float,doubledecimal

sbyte         short,int long,float,double,decimal

short          int,long,float,double,decimal

ushort          int,uint,long,ulong,float,double,decimal

int            long,float,double,decimal

uint          long,ulong,float,double,decimal

long           float,double,decimal

ulong         float,double,decimal

float            double

char           ushort,int,uint,long,ulong,float,double,decimal


 这些类型的隐式转换规则是任何类型A,只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换为类型B。

例如,short类型的变量可以存储0~32677的数字,而byte可以存储的最大值是255,所以如果要反一个short值转换为byte值,就会出问题。如果short包含的值在256~32767之间,该数值就不能放在byte中。

如果short类型变量中的值小于255,就可以转换这个值。但必须使用显式转换。

(2)显式转换

             byte  destinationVar;
            
short  sourceVar  =   7 ;
            destinationVar 
=  sourceVar;
            Console.WriteLine(
" sourceVar val: {0} " , sourceVar);
            Console.WriteLine(
" destinationVar val: {0} " , destinationVar);

 如果编译这段代码,就会产生一个编译错误,为了成功编译这段代码,需要添加代码,进行显式转换。

数据类型转换就是强迫数据从一种类型转换为另一种类型,其语法:

(destinationType)sourceVar

*彼此之间没有什么关系的类型不能进行数据转换。

所以上面第三行代码应改为

destinationVar = (byte)sourceVar;

得到如下结果:

sourceVar val: 7

destinationVar val: 7

在试图把一个值转换为不合适的变量时,会发生什么呢?修改代码:

short  sorceVar  =   281 ;

 结果如下:

sourceVar val: 281

destinationVar val: 25

如果看看这两个数字的二进制表示,以及可以存储在byte中的最大值255:

281=100011001
25  =000011001

255=011111111

可以看出,源数据的最左边一位丢失了。

这就引出一个问题,何时会丢失数据?所以我们需要知道当显式地把一种数据类型转换为另一种数据类型时,是否有数据丢失了。

一种方式就是用两个关键字:checked 和 unchecked,称为表达式溢出检查环境。

语法:

checked(expression)

unchecked(expression)

(3)使用Convert命令进行显式转换

 Convert进行的显式转换:


命令            结果类型

Convert.ToBoolean(val);  bool
Convert.ToByte(val);     byte
Convert.ToChar(val);     char
Convert.ToDecimal(val);   decimal
Convert.ToDouble(val);    double
Convert.ToInt16(val);    short
Convert.ToInt32((val);         int
Convert.ToInt64(val);          long
Convert.ToSByte(val);      sbyte
Convert.ToSingle(val);      float
Convert.ToString(val);    string
Convert.ToUInt16(val);     ushort
Convert.ToUInt32(val);     uint
Convert.ToUInt64(val);   ulong

 

 

 

 

 



示例:

         static   void  Main( string [] args)
ExpandedBlockStart.gifContractedBlock.gif        
{
            
short shortResult, shortVal = 4;
            
int integerVal = 67;
            
long longResult;
            
float floatVal = 10.5F;
            
double doubleResult, doubleVal = 99.999;
            
string stringResult, stringVal = "17";
            
bool boolVal = true;

            Console.WriteLine(
"Variable Convertion Examples\n");

            doubleResult 
= floatVal * shortVal;//将float和short显式转换为double,然后相乘.doubleResult=10.5*4=42
            Console.WriteLine("Implicit,->double:  {0}  *  {1}  ->  {2}", floatVal, shortVal, doubleResult);

            shortResult 
= (short)floatVal;//将float显示转换为short,然后赋值.shortResult=10.5
            Console.WriteLine("Explicit,->short:  {0}  ->  {1}", floatVal, shortResult);

            stringResult 
= Convert.ToString(boolVal) + Convert.ToString(doubleVal);//将bool和double显式转换为string,然后相加.stringResult="True99.999"
ExpandedSubBlockStart.gifContractedSubBlock.gif
            Console.WriteLine("Explicit->string:   \"{0}\"  +  \"{1}\"   ->  {2}", boolVal, doubleVal, stringVal);

            longResult 
= integerVal + Convert.ToInt64(stringVal);//将sting显式转换为long,然后与int相加.longResult=67+17=84
            Console.WriteLine("Mixed, ->long:  {0}  +  {1}  ->  {2}", integerVal, stringVal, longResult);

            Console.ReadKey();
        }


 

 

转载于:https://www.cnblogs.com/soso_ak/archive/2009/04/18/1438756.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值