原题目:
来自2012微软校园实习生笔试题 第10题
(10) Assume both x and y are integers, which one of the followings returns the minimum of the two integers?
(A) y ^ ((x ^ y) & ~(x < y))
(B) y ^(x ^ y)
(C) x ^ (x ^ y)
(D) (x ^ y) ^ (y ^ x)
(E) None of the above【正确】
思路:
这里要讲解的方法与A选项的形式很像,只是括号的位置稍微不同。
式1:
y ^ (x ^ y) & ~(x < y) —— 求x y 中最小值
式2:
x ^ (x ^ y) & ~(x
< y) —— 求x y 中最大值
注:~是取反操作。
下面对上面的式子进行解释。
如果x < y 则 ~(x < y) = -1【补码形式为全1】 那么(x ^ y) & ~(x < y)的结果为(x ^ y)
根据异或(^)运算的交换律y ^ (x ^ y) = x 【即:x y 中的较小值】。
同理:
x ^ (x ^ y) & ~(x < y)最终的结果为y 【即:x y 中的较大值】
参考:
http://blog.youkuaiyun.com/gukesdo/article/details/7439059
在此表示感谢。