zoukankan      html  css  js  c++  java
  • 隐式转换和显示转换

    隐式转换由系统来做的,显示转换由程序员自己来做的

    char c;
    int a = c; //隐式转换 ok
    int b = (int )c; //显示转换 ok
    char d = a; //隐式转换 error
    char e = (char)a;//显示转换 ok

        关于隐式转换和显示转换,每种语言都有的,一般常用到的场合,一种是写运算表达式的时候,要保持整体的数据类型一致和计算准确,比如有一个变量a是int型,但是它是通过加减乘除得到的,那么在运算中就要考虑用显示转换,除的运算需要转换成float或double,再把结果强制转换为int;再一个就是传参数的时候,需要注意哪些需要显示转换,或者对集合赋值的时候也要注意类型的问题。

    1. 隐式类型转换 所谓隐式转换,就是系统默认的转换,其本质是小存储容量数据类型自动转换为大存储容量数据类型。有如下几种: 从sbyte类型到short,int,long,float,double,或decimal类型。

    从byte类型到short,ushort,int,uint,long,ulong,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类型。

    从char类型到ushort,int,uint,long,ulong,float,double,或decimal类型。

    从float类型到double类型。

    2.显式类型转换

    显式类型转换,即强制类型转换。与隐式转换相反,而且强制转换会造成数据丢失。

    从sbyte到byte,ushort,uint,ulong,或char。

    从byte到sbyte或char。

    从short到sbyte,byte,ushort,uint,ulong,或char。

    从ushort到sbyte,byte,short,或char。

    从int到sbyte,byte,short,ushort,uint,ulong,或char。

    从uint到sbyte,byte,short,ushort,int,或char。

    从long到sbyte,byte,short,ushort,int,uint,ulong,或char。

    从ulong到sbyte,byte,short,ushort,int,uint,long,或char。

    从char到sbyte,byte,或short。

    从float到sbyte,byte,short,ushort,int,uint,long,ulong,char,或decimal。

    从double到sbyte,byte,short,ushort,int,uint,long,ulong,char,float,或decimal。

    从decimal到sbyte,byte,short,ushort,int,uint,long,ulong,char,float,或double。

    当转换有丢失信息或导致异常抛出,转换按照下列规则进行:

    对于从一种整型到另一种整型的转换,编译器将针对转换进行溢出检测,如果没有发生溢出,转换成功,否则抛出一个OverflowException异常。这种检测还与编译器中是否设定了checked选项有关。

    对于从float,double,或decimal到整型的转换,源变量的值通过舍入到最接近的整型值作为转换的结果。如果这个整型值超出了目标类型的值域,则将抛出一个OverflowException异常。

    对于从double到float的转换,double值通过舍入取最接近的float值。如果这个值太小,结果将变成正0或负0;如果这个值太大,将变成正 无穷或负无穷。如果原double值是Nan,则转换结果也是NaN。

    对于从float或double到decimal的转换,源值将转换成小数形式并通过舍入取到小数点后28位(如果有必要的话)。如果源值太小,则结果为0;如果太大以致不能用小数表示,或是无穷和NaN,则将抛出InvalidCastException异常。

    对于从decimal到float或double的转换,小数的值通过舍入取最接近的值。这种转换可能会丢失精度,但不会引起异常。

  • 相关阅读:
    【转】[完结] 取结构偏移 和 取地址符号的 思考
    资料备忘 【攀枝花】 我的百度文库
    static_cast reinterprt_cast 区别
    c++ 四种转换 cast 列表小结 (等待补充)2012 3月
    对偏移表达式的 思考过程—how offset macro is think out
    【转】常见面试题思想方法整理 原来果然有双指针遍历
    [转]好的习惯 提高你开发效率的十五个Visual Studio 2010使用技巧
    多种方案 测试 有无符号数包括 不适用大小于符号判断符号数
    [转] 仅有USB线拷贝无SD卡小米照相文件方法 简言adb shell
    iframe 高度自动调节
  • 原文地址:https://www.cnblogs.com/binyao/p/3059595.html
Copyright © 2011-2022 走看看