C#学习笔记四(转换1)

什么是转换:

(1)转换是将一个类型的值用作另一个类型的等价值的过程。

(2)转换后目标的值与源值一样,但其类型为目标类型。

(3)转换后源值的类型和值都没改变,只是把源值做为目标类型的值来使用。

隐式转换:当从位数更小的源类型转换为位数更大的目标类型的时候,不会丢失数据和精度,语言会自动做这些转换,这叫做隐式转换。

(1)从位数更少的源类型转换为位数更多的目标类型时,目标中多出来的位用0或1填充。

(2)当从更小的无符号类型转换成更大的无符号类型时,目标类型多出来的最高位都用0进行填充,这叫做零扩展。

 (3)对于有符号类型的转换,额外的最高位用源表达式的符号位进行填充,,这样就维持了被转换的值的正确符号和大小,这叫做符号扩展。

显式转换:显式转换通过强制转换表达式来实现,当从更大位数类型转换为更小位数类型时,可能会发生数据和精度的损失,C#不会自动进行隐式转换,强制转换表达式构成如下:

目标类型 (sbyte) var1;源表达式 例如:

ushort sh = 1365;
byte sb = (byte)sh;//强制转换

溢出检测上下文:由于显示转换可能丢失数据并且不能在目标类型中同等地表示源值,C#提供了checked运算符checked语句来在进行类型转换时检测结果溢出。

(1)代码片段是否被检查称作溢出检测上下文。

*如果使用了checked,CLR(Common Language Runtime)会在转换产生溢出时抛出一个OverflowException异常。

*如果代码不是checked,转换会继续而不管是否产生溢出。

(2)默认的溢出检测上下文是不检查的。

checked和unchecked运算符:

checked(表达式)     unchecked(表达式)

ushort sh = 2000;
byte sb;

sb = unchecked((byte) sh);//数据丢失
sb = checked((byte) sh);//抛出OverfloeException异常

checked和unchecked语句:与运算符执行相同的功能,只是控制范围变大,可以被嵌套在任意层次。

ushort sh = 2000;
byte sb;

checked
{
    unchecked
    {
        sb = (byte)sh;//数据丢失
    }

    sb = (byte)sh;//抛出OverflowException异常
}

显式数字转换:在数值型类型间进行的显式转换。

(1)整数到整数间的显式转换:

**在checked的情况下,如果转换丢失数据,操作会抛出一个OverflowException异常。

**在unchecked的情况下,丢失的位不会发出警告。

(2)float或double转到整数类型:

当把浮点类型转换成整数类型时,值会舍掉小数,阶段为最接近的整数。如果截断后的值不在目标类型的范围内:

**在checked的情况下,CLR会抛出OverflowException异常。

**在unchecked的情况下,则C#将不定义它的值是什么。

(3)decimal到整数类型:

当从decimal转换到整数类型时,如果结果值不在目标类型的范围内,则CLR会抛出OverflowException异常。

(4)double到float:

**如果值太小而不能用float表示,那么值会被设置为正0或负0。

**如果值太大而不能用float表示,那么值会被设置为正无穷大或负无穷大。

(5)float或double到decimal:

**如果值太小而不嫩用decimal类型表示,那么值会被设置为0。

**如果值太大,那么CLR会抛出OverflowException异常。

(6)decimal到float或double:

从decimal类型转换到float类型或double类型总是会成功,然而,可能会损失精度。

C#学习笔记四(转换2)_Zenki--的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值