Java 计算两个数的中间值

一个数 n ∈ [a, b]

计算中间值 m

第一种方法(会溢出):m = ( a + b ) / 2

int a = 10_0000_0000; // 10亿
int b = 12_0000_0000; // 12亿
int m = (a + b) / 2;
System.out.println(m); // -1047483648

第二种方法(不会溢出):m = a + ( ( b - a ) >> 1 ) 或 m = a + ( ( b - a ) / 2 )

int a = 10_0000_0000; // 10亿
int b = 12_0000_0000; // 12亿
int m = a + ((b - a) >> 1);
// 或者 int m = a + ((b - a) / 2);
System.out.println(m); // 1100000000

第三种方法(不会溢出):m = ( a & b) + ( ( a ^ b) >> 1 )

int a = 10_0000_0000; // 10亿
int b = 12_0000_0000; // 12亿
int m = (a & b) + ((a ^ b) >> 1);
System.out.println(m); // 1100000000

注:

  • a >> n 等价于 a / (2^n)
  • a << n 等价于 a * (2^n)
  • a & 1 等价于 a % 2

posted on 2023-02-05 12:00  demo-arch  阅读(388)  评论(0)    收藏  举报