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的转换,小数的值通过舍入取最接近的值。这种转换可能会丢失精度,但不会引起异常。

  • 相关阅读:
    bzoj5178 [Jsoi2011]棒棒糖 主席树+线段树二分
    bzoj4408 [Fjoi 2016]神秘数 & bzoj4299 Codechef FRBSUM 主席树+二分+贪心
    bzoj3123 [Sdoi2013]森林 树上主席树+启发式合并
    bzoj4448 [Scoi2015]情报传递 主席树+树上差分
    bzoj4399 魔法少女LJJ 线段树合并+线段树二分+并查集
    CF1009F Dominant Indices 长链剖分
    bzoj4543 [POI2014]Hotel加强版 长链剖分+树形DP
    bzoj4009 [HNOI2015]接水果 整体二分+扫描线+树状数组+dfs序
    bzoj4940 [Ynoi2016]这是我自己的发明 莫队+dfs序
    bzoj5016 & loj2254 [Snoi2017]一个简单的询问 莫队
  • 原文地址:https://www.cnblogs.com/binyao/p/3059595.html
Copyright © 2011-2022 走看看