不使用(a+b)/2,求数平均值的方法

不用(a+b)/2,求两数平均值

#include <stdio.h>

int main()

{

int a = 10;

int b = 20;

int aver = a-(a-b)/2;//方法1

int aver = (a&b)+((a^b)>>1);//方法2

printf("%d\n",aver);

return 0;

}

方法1很容易理解,就不解释了。

方法2:avg=a&b+((a^b)<<)都为‘1‘的所

a&b取出a和b二进制中都为‘1‘的所有位,因为相同直接相加就可以了。

a^b,a和b中有一个为‘1‘的所有位,一部分是a为‘1‘,b为‘0‘,另

一部分是为‘1‘,a为‘0‘,两部分加起来除以2,然后和前面的相加就可以了。

时间: 2024-12-28 08:36:57

不使用(a+b)/2,求数平均值的方法的相关文章

25.按要求编写一个Java应用程序: (1)编写一个矩形类Rect,包含: 两个属性:矩形的宽width;矩形的高height。 两个构造方法: 1.一个带有两个参数的构造方法,用于将width和height属性初化; 2.一个不带参数的构造方法,将矩形初始化为宽和高都为10。 两个方法: 求矩形面积的方法area() 求矩形周长的方法perimeter() (2)通过继承Rect类编写一个具有

package zhongqiuzuoye; public class Rect { public double width; public double height; Rect(double width,double height) //带有两个参数的构造方法,用于将width和height属性初化; { this.width=width; this.height=height; } Rect() //不带参数的构造方法,将矩形初始化为宽和高都为10. { width=10; height=

一个统计代码行数的简单方法

安装Git, 到项目目录下右击->Git Bash, 输入命令: find . -name "*.cs" | xargs wc -l 效果如下, 还是挺简便的. 一个统计代码行数的简单方法,布布扣,bubuko.com

表达式求值(二叉树方法/C++语言描述)(二)

表达式二叉树节点的数据可能是运算数或运算符,可以使用一个联合体进行存储:同时还需要一个变量来指示存储的是运算数还是运算符,可以采用和栈方法中一样的枚举类型TokenType: 1 typedef enum 2 { 3 BEGIN, 4 NUMBER, 5 OPERATOR, 6 LEFT_BRAC, 7 RIGHT_BRAC 8 } TokenType; 9 10 class Token 11 { 12 public: 13 TokenType _type; 14 union 15 { 16 c

python求crc32值的方法

python求crc32值的方法 在python代码中求CRC值,要import binasciibinascii.crc32(v) 求出了v的crc32值,这是一个long型,形如-1456387L,把这个值&0xffffffff得到的值形如48a213L的形式.然后,把这个值用16进制表示出来.www.jbxue.com例子: def _crc32(self, v): """ Generates the crc32 hash of the v. @return:

grep命令參数及使用方法

功能说明:查找文件中符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或文件夹...] 补充说明:grep 指令用于查找内容包括指定的范本样式的文件,假设发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来.若不指定

C++ 求阶乘 四种方法

来总结下求阶乘的各种方法哈. 写在最前:①各个代码仅仅是提供了求阶乘的思路,以便在实际须要时再来编码,代码并不健壮!②各个程序都在1到10内測试正确. 代码一: #include<iostream> using namespace std; int fac(int); int main() { int n; while(cin>>n) { cout<<n<<"!= "<<fac(n)<<endl; } return

论求最大公约数的方法

求最大公约数实际上是一个非常简单的问题,但是在ACM中如何将效率搞的最高也需要一点点技巧.下面将今天收集到的一点资料粘贴在此处. 书上是说: 1.输入m.n(m为被除数,n为除数)2.m/n得余数r.3.判断r=0?是的话n为最大公约数.4.否则将n赋给m,r赋给n,循环2. 辗转相除法:如: 求(45, 72) 72/45 = 1 余 27 不等于0,再除45 /27= 1 余 18 不等于0,再除27/18= 1 余 9 不等于0,再除18/9 = 2 余 0 等于0,结束. 所以 (45,

牛顿迭代法应用——求数的平方根和立方根

牛顿迭代法,从一个值开始,用无限逼近的方式得出结果. #include<stdio.h> #include<math.h> int main() { double a; double x; scanf("%lf",&a);//求a的平方根和立方根 x = a/2; ////平方根///// while( fabs(x*x-a) > (1e-6) ) { x = (x+a/x)/2; } printf("%lf\n",x); //

HDU 1013 Digital Roots(两种方法,求数字根)

Digital Roots Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 67949    Accepted Submission(s): 21237 Problem Description The digital root of a positive integer is found by summing the digits of