区别:

  1. 隐式转换失败编译会报错。
  2. 显示转换有可能精度丢失。
  3. 根据项目的编译设置,显示转换溢出可能会报错,如果设置溢出且未使用checked检查,运行时如果发生溢出会产出未知的计算结果。
  4. 在数字运算时,会有默认的隐式转换

一、隐式转换
  val1 = val2; // 写法简单。即 一个变量val2 赋给 另一个变量val1

  从小范围到大范围。如 byte的取值范围是 0 ~ 255, short的范围是 0~32677 所以 byte类型的变量 a 可以赋给 short类型的变量b。

   反之 short 类型的赋给 byte 编译会报错。如果非要转的话 就用到 显式转换(强制转换)。

二、显式转换
  格式:
    1.类型 valA = (类型2) valB;
    2.类型 valA = Convert.To类型2(valB);

  1) 强制转换会有精度丢失的问题。
  如
    short shortNum = 281;
    byte byteVal = (byte)shortNum;// byte 会赋值 25
    // 因为 281 = 1,0001,1001
    // 25 = 0,0001,1001
    // 255 =  0,1111,1111
    // 即 255最多取 8位,从第9位开始就舍弃了。

  2)用 checked关键字 检测是否溢出。
  如
    short shortNum = 281;
    byte byteVal = checked((byte) shortNum); // 运行到该行会报错。"Arithmetic operation resulted in an overflow."

    unchecked关键字 表示忽略溢出检查,和 checked写法类似。
  3)

    System.Convert.ToXXX(val); // 转换基本类型,都会执行溢出检测(即效果类似默认都加了 checked 判断)

三、运算时的默认隐式转换 
  如 两个 short 相乘的结果 很大概率超过 short 上限,所以返回的结果是 int 类型的。
  doubleRe = floatVal + (shortVal * floatVal);
  混合运算时,根据运算优先级
    1)计算 * ,将 shortVal 转换成 float 类型
    2)计算 + ,float 和 float 相加不会类型转换。
    3)= 时,将结果转换为 double。

  查看变量类型可以用 val.GetType() 函数。

C# 中的隐式类型转换(运算时的隐式转换)和显示类型转换的更多相关文章

  1. Java中byte、short、char、int、long运算时自动类型转化问题

    -------------------------------------------------------------------------------------------------- ★ ...

  2. C#的隐式和显示类型转换

    原文地址:http://blog.csdn.net/yysyangyangyangshan/article/details/7494577 关于隐式转换和显示转换,每种语言都有的,C#中当然也不例外. ...

  3. C#之隐式与显示类型转换

    今天在看一篇有关数据类型的文章的时候,无意间看到了两个关键词,"隐式转换"与"显示转换",然后突然想起了当初开始学编程的时候,也总是在代码编译的时候遇到这样的问 ...

  4. php运算时默认的类型转换

    php属于弱类型语言,使用数据时无需指定其数据类型.对于学C语言入门的我,刚刚接触时感觉很神奇,但是随之而来的也有烦恼. 总结一下php中默认的类型转换,按照运算符类型,只总结能够自动做类型转换的运算 ...

  5. 我的Java开发学习之旅------>解惑Java进行三目运算时的自动类型转换

    今天看到两个面试题,居然都做错了.通过这两个面试题,也加深对三目运算是的自动类型转换的理解. 题目1.以下代码输出结果是(). public class Test { public static vo ...

  6. js在运算时的类型转换

    日期类型与数字类型的运算 在加法时将日期对象与数字都当作字符串进行连接 字符串的运算方式中没有减法.乘法.除法.转化成数字类型进行运算 字符串类型字符与数字类型的运算 在加法时将二者都转换成字符串进行 ...

  7. sql server 中进行除法运算时,如何得到结果是小数形式呢?

    我们正常进行除法运算时,sql默认是返回一个四舍五入的数 比如12除以5,17除以3 --算法1:返回结果:2 需要的是2.40 ) as 结果1 --算法2:返回结果:5 需要的是5.67 ) as ...

  8. 【C++自我精讲】基础系列五 隐式转换和显示转换

    [C++自我精讲]基础系列五 隐式转换和显示转换 0 前言 1)C++的类型转换分为两种,一种为隐式转换,另一种为显式转换. 2)C++中应该尽量不要使用转换,尽量使用显式转换来代替隐式转换. 1 隐 ...

  9. [Effective Modern C++] Item 6. Use the explicitly typed initializer idiom when auto deduces undesired types - 当推断意外类型时使用显式的类型初始化语句

    条款6 当推断意外类型时使用显式的类型初始化语句 基础知识 当使用std::vector<bool>的时候,类型推断会出现问题: std::vector<bool> featu ...

随机推荐

  1. 解决IIS中Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

  2. NIO-直接内存

    写NIO程序经常使用ByteBuffer来读取或者写入数据,那么使用ByteBuffer.allocate(capability)还是使用ByteBuffer.allocteDirect(capabi ...

  3. 「SDOI2008」洞穴勘测

    题目链接 戳我 \(Solution\) \(LCT\)裸题 \(Connect\)操作,执行\(link(u,v)\) \(Destroy\)操作,执行\(cut(u,v)\) \(Query\)操 ...

  4. AI-Info-Micron:人如其食:人工智能和人类微生物组

    ylbtech-AI-Info-Micron:人如其食:人工智能和人类微生物组 1.返回顶部 1. 人如其食:人工智能和人类微生物组 “相信你身体发出的信号”,的确是一个很好的建议.研究人员在不遗余力 ...

  5. 决定以后再做公司的项目的时候,能够用其他语言的绝对不用delphi

    1.delphi7的IDE真的很不友好 2.delphi7的控件有的有问题 3.delphi7居然不支持结构体的泛型存储 4.网上的解决文档超少,一些小bug,就要折腾半天 5.pascal语法太过结 ...

  6. 指针版P3690 【模板】Link Cut Tree (动态树)

    题面 传送门 题解 鉴于数组版实在是太慢我用指针版重新写了一遍 代码基本是借鉴了lxl某道关于\(LCT\)的题 //minamoto #include<bits/stdc++.h> #d ...

  7. C++中指针运算

    1,指针可以和数字运算,指针+-整数,如, int num[] = {1,2,3,4,5,6,7,8}; int *p = num; p++; p--; p = p + 3; p = p -3; 数字 ...

  8. linux防火墙(五)—— 防火墙的规则备份与还原

    一.第一种备份还原用法,使用工具 iptables-save >/opt/iprules.txt iptables-restore < /opt/iprules.txt #注意导入的文件必 ...

  9. 网络基础 09_STP生成树协议

    1 STP概念 冗余拓扑结构 冗余拓扑结构能解决单点故障的问题 冗余拓扑结构会引起广播风暴,多帧COPY,MAC地址表错误的问题 广播风暴 当主机X发送一个广播包后 交换机继续没完没了的更新广播流量 ...

  10. Go语言指针

    指针简介 (Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值.由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元.因此,将 ...