(a+b)/2 = a&b + (a^b)>>1 求解释
如题
/*mid = (first+last)/2;*/ /*注意防止溢出*/
/*mid = first/2 + last/2;*/
/*mid = ((first & last) + (first ^ last) >> 1);*/
mid = ((first & last) + ((first ^ last) >> 1)); /*修正上一句优先级错误*/ C语言 位运算
[解决办法]
没啥可解释的,二进制基本运算而已,先求相同部分,再把不同部分除2就是中值了
举例来说,111和101求中值,首先分成(101+101)+(10),然后除以2就是(101)+(10>>1)