C语言中(x&y)+((x^y)>>1)表达式解析

为什么这个表达式能够计算x,y的平均值呢 希望有大神能给个详细的解析 谢谢!

首先,一个数字除以2就相当于二进制下右移一位(这个不用解释了吧),然后,对于二进制,x+y的操作,对于一个为0一个为1的,就在那个位上变为1.那么你看下,按位异或是不是能达到这个效果。而对于两个数都为1的那位,相与后那一位还是1,正常相加的话,这个位的前一位要变1的,但是要求平均值是要除以2的(右移一位),那么这个位的前一位就不用加1了,因为还要除2消掉,所以x&y那一步不用右移,而x^y要右移一位来除以2。结束

这样说可能不是特别好懂,建议你找两个数试一试,然后对照我的描述想一想
温馨提示:内容为网友见解,仅供参考
无其他回答

c语言x=&y和*x=y有什么区别?
C的函数中的形参接收的都值拷贝。用x=&y后使x指向了y,但x和y都是fun中的局部变量,退出后都不存在了,影响不到主函数中的变量值。而*x=y;是把y的值(也就是主函数中的b的值)赋给x指向的变量,x指向的变量不是a吗?所以实质就是把b的值赋给了a;而返回值是y=t,实质就是t,t既然先...

C语言表达式(x+y)&&x=y的值问题
你好:1 :x+y 返回一个数值 2: x+y 和x 都不为0返回真(1),否则返回假(0)3:返回真假,如果x+y不为0,就会有x=y,然后x,y不为0 返回真,如果x+y 为0,则直接返回假,x=y不运算。

C语言中,比如z=(x%y,x\/y)括号的运算什么意思,能解释下吗谢谢
x%y的意思是取余数。比如100\/3=33...1 ,那么x%y=1.x\/y的意思就是相除。

C语言中,(x&&y)==(x||z)的意思是?值为?
x和y都为非零值时,(x && y)为真(1),任意一个为零,或都为零时,(x && y)为假(0),&&为逻辑与操作符。x和z有一个为真(非零)时,或都为真时,(x || z)为真(1),只有x和z都为零时,(x || z)才为假(0),||为逻辑或操作符。==是比较操作符,如果两边都为真或都为假,...

数学表达式对应的C语言表达式是“x*y\/(x^2+y^2)”。错在哪里
^在c语言中不再是幂次运算,而是二进制的位运算,表示异或 所以这个表达式应该写成“x*y\/(x*x+y*y)”

c语言中(x)<(y)?(x):(y)是什么意思
详情请查看视频回答

c语言(x-y)?(x++):(y++)
应该是C,此语句的意思是如果x-y为真 则执行x++,否则执行y++;c语言中非零即为真,所以此题应为C,呵呵!

((x<y)?x:y)==z++什么意思
1、这是一个逻辑表达式。2、他得到的值只能是真或假。3、前面是一个问号表达式,他的作用是比较 x与 y的大小,当 x<y时,表达式的值等于 x,否则等于 y。即等于x与y之中小的那一个。4、取得问号表达式的值后,再与 z比较大小。如果相等,整个逻辑表达式的值为真,在C语言中用1表示;如果不...

C语言编程题
由于:define MAX(x,y) (x)>(y) ? (x):(y)define T(x,y,r) x*r*y\/4 把下面的式子,直接替换掉,注意,是直接替换:main(){ int a=1,b=3,c=5,s1,s2;s1=(a=b)>(b-a)? (a=b):(b-a); \/\/s1=MAX(a=b,b-a);s2=a++ * a+b+c * a*++b ...

C语言编写一个程序,求x> y的运行结果
以下是一个简单的C语言程序,可以比较两个整数x和y,并打印出相应的结果:在这个程序中,我们首先声明了两个整数变量x和y,然后使用printf函数提示用户输入两个整数。接下来,我们使用scanf函数读取用户输入的整数,并将它们存储在变量x和y中。然后,我们使用一个if-else语句来比较x和y的值。如果x大于y...

相似回答