java安全防溢出的两整数平均值算法

Server Tomcat v7.0 Server at localhost failed to start.问题解决
2017年9月16日
HTML全部标签简介
2017年10月5日

一般求两整数平均值大家可能会有如下写法

  1. public
    static
    int
    mean(int a, int b){
  2.     return (a + b) / 2;
  3. }

好一些的会这样写

  1. public
    static
    int
    mean(int a, int b){
  2.     return (a + b) >> 1;
  3. }
  4. //或
  5. public
    static
    int
    mean(int a, int b){
  6.     return (a + b) >>> 1;
  7. }

这样的确能够求出两个数的平均值,但是,当两数为a=0xffff,b=0001时,由于结果溢出,产生错误,平均值计算为0

下面给大家一种安全的防溢出算法:

1、将相同的位进行相加,结果等于两数按位与的结果的两倍;
2
、将不同的位进行相加,其结果等于按位异或的结果。

代码如下:

  1. public
    static
    int
    mean(int a, int b){
  2.     return (x & y) + ((x ^ y) >> 1);
  3. }

发表评论

邮箱地址不会被公开。 必填项已用*标注