zoukankan      html  css  js  c++  java
  • 为什么在 Java 中用 (low+high)>>>1 代替 (low+high)/2 或 (low+high)>>1 来计算平均值呢?好在哪里?

     

    >>>与>>是位运算符,只对整型有效(不能用于浮点型)。
    当是整型的时候(low+high)>>1可以代替(low+high)/2。
    >>>是无符号右移运算符。如果 low+high是正整数,这三种运算是等价的。
     由于有编译器优化,他们的效率应该是相同的(如果不存在编译器优化,移位运算更快)。
    用>>>一般是有特殊的目的

    至于>>>和>>的区别,则在于有符号和无符号。比如-2>>>1的结果是2147483647,而-2>>1的结果是-1。(其中2147483647是-2的补码右移一位后,左边补0的结果。)

    这里计算平均值使用>>>取代>>,恐怕是因为可能出现很大的数字,这些数字单独用不会超过Integer.MAX_VALUE,但求和之后可能超过,这时如果使用>>或者/来计算,会因为溢出而算出负数结果。

  • 相关阅读:
    【php】错误日志处理
    【php】正则表达式
    【php】字符串
    【PHP】数组
    【PHP】函数
    【PHP】流程控制
    【PHP】PHP运算符
    【PHP】PHP基本语法
    【前端】CSS总结
    SVN与Apache整合
  • 原文地址:https://www.cnblogs.com/findbetterme/p/10828554.html
Copyright © 2011-2022 走看看