zoukankan      html  css  js  c++  java
  • C# 中的隐式类型转换(运算时的隐式转换)和显示类型转换

    区别:

    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() 函数。

  • 相关阅读:
    zoj 2316 Matrix Multiplication 解题报告
    BestCoder7 1001 Little Pony and Permutation(hdu 4985) 解题报告
    codeforces 463C. Gargari and Bishops 解题报告
    codeforces 463B Caisa and Pylons 解题报告
    codeforces 463A Caisa and Sugar 解题报告
    CSS3新的字体尺寸单位rem
    CSS中文字体对照表
    引用外部CSS的link和import方式的分析与比较
    CSS样式表引用方式
    10个CSS简写/优化技巧
  • 原文地址:https://www.cnblogs.com/sweetXiaoma/p/8661897.html
Copyright © 2011-2022 走看看