zoukankan      html  css  js  c++  java
  • 2018-1-20:类型转换,运算的问题

    高精度类型->低精度类型的强转可能丢失精度,因为它是把高精度的低位截取转换为低精度数值,由此也引出了一些问题,请看下面两个问题:

    问题一:请解释下述代码的错误原因

    代码一:可以得出预料结果:

    运行结果:10

    代码二:错误

    运行结果:错误,可能丢失精度

    错误原因:在代码二中b1与b2都是变量,无法进行类型边界数值得检测,所以无法确定是否在byte的取值范围内,故会报精度错误。

    代码三:

     

    运行结果:-2147483648

    原因:默认int类型的整数相加还是int类型的整数,一旦超出边界就会截取低32位,所以二进制首位(最高位)变为1,即为负数

    代码四:

    运行结果:1234

    原因:任何数据和字符串相加都是做连接操作。

    代码五:

    运行结果: 7 

    原因:这个之所以能正确运行,是因为+=这类运算符底层自动进行了类型转换,即先将s+4的运算结果转化为short再赋值给s,等价于s = (short)(s + 4);

    如果这么写:short s = 3; s = s + 4; 运行错误,因为s不确定,是变量。

  • 相关阅读:
    MFC加载图片
    动态数组类
    MFC程序打包方法
    如何在C++中使用动态三维数组
    Ansys热应力计算
    像使用数据库一样使用xml
    过年回家的一点感想
    前后端框架和设计模式
    国外支付PayPal
    可重用的管理后台代码
  • 原文地址:https://www.cnblogs.com/tfboy/p/8320433.html
Copyright © 2011-2022 走看看