int f(int x,int y)
{
return (x&y)+((x^y)>>1);
};
f(729,271)=500.
解答:
x&y是取相同的位與,這個結果是x和y相同位,x^y是取x和y的不同位的和,右移1位,相當於除以2.所以結果是求x和y的平均數。
如果二進制不易理解,那我們看看十進制的情況。
假如將&操作和^操作推廣到是取十進制位中來,即如果&操作對應的兩個位上的數相同,則結果爲兩個數中的一個,否則爲0.如2&2=2,2&3=0;如果^操作則留下兩個數不同的那些位,234^136=204+106;
(以下的&和^都是上面假設推廣到十進制中的運算符,而非二進制中的運算符)
現在如果設x=234,y=136,x&y=30,x^y=204+106,(x&y)+((x^y)/2)=30+(204+106)/2=185.
( (234+136) / 2 = ( 204+30+106+30) / 2 = 30 + (204+106) / 2 ).