zoukankan      html  css  js  c++  java
  • a=a+b与a+=b的区别

      在一次工作中身边的一位资深的同事突然问了个a=a+b与a+=b有什么区别 此时有点尴尬了 不知道是真的不知道咧还是别有用意....今天抽点时间针对此问题做个小总结

    一、性能方面
      a=a+b是加法运算 需要两次寻找地址而a+=b是增量运算有寄存器优先时 只有一次地址查找。效率方面后者略高于前者 基于现在计算机的发展可忽略不计。

    二、可读性方面
      两者都是赋值运算,一般情况下可以认为两者没有什么区别 但前者与数学算法描述更接近相对来说更严谨而后者书写更快捷但可读性下降。

    三、数据类型方面
      两者写法上主要在于是否能进行数据类型自动转换,事实上就是类型与精度上的差异。eg:当两个操作数 数据类型一致时两种形式的运算结果没有差别 但数据类型不同时 且a值的数据类型精度低时 此时两种形式就有区别了。

    定义a是short类型变量 执行a+=b[b为int类型的20值]时 输出结果为30 自动将int为20的类型转换int。
    代码稍微调整一下

    调整为a=a+b结构时 编译无法通过 类型不匹配。而在javascript中确不存在此问题 弱类型语言真强大啊……

    为什么在C#中会有此问题产生呢?
    原因:在"+="这个运算符在C#中是一个运算符 程序在执行“+=”时 会自动向高精度类型转换 即a+=20 编译通过;而“=”要求两过类型一致 a=a+b结构中 a是short类型变量 而b为int类型常量 此时(short类型+int类型)出现类型不匹配问题 估编译失败。
    :b为变量且明确申名了变量数据类型时 则a+=b与a=a+b 都存在类型转换问题 需强制进行类型转换

    若强行用short类型去接收int类型的数据 可以进行强类型转换 但最终导致结果是精度丢失。

     

  • 相关阅读:
    HDNOIP201404最短路径
    BJOI2015 Day3
    BJOI2015 Day2
    BJOI2015 Day1
    BZOJ4012 [HNOI2015]开店
    hdu2159(二维完全背包)
    hdu3496(二维背包)
    hdu3033(变形分组背包)
    hdu1267(递推)
    hdu1503(最长公共子序列)
  • 原文地址:https://www.cnblogs.com/tx720/p/9906248.html
Copyright © 2011-2022 走看看