两个数二进制数异或 结果是什么

今天到文华书店看到了一本程序员面试的书 里面有一个问题始终令我头疼 问题就是“两个数二进制数异或后 结果是什么” 真的头疼 这是美国著名网络公司出的面试题
我问的是 两个二进制数异或后的结果 异或我当然知道怎么运算了

准确的说法是每个数位上对应的两数差的绝对值。如0100和1011。
右往左数第一位,|0-1|=1为异或值右往左数第一位。
右往左数第二位,|0-1|=1为异或值右往左数第二位。
右往左数第三位,|1-0|=1为异或值右往左数第三位。
右往左数第四位,|0-1|=1为异或值右往左数第四位。
其实只要你理解什么是异或就好做这类题目得多。
异或是一个判定是否不同的值。
在2进制中,
同一位置所对应数值不同,则异或输出的判定值为真——“1”
如果对应数值相同,则异或输出判定值为假——“0”
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-06
异或后的结果为两个数化成二进制后不同位的和。举个例子,16(10000)异或15(01111),五位都不同,所以结果为五位的和,即五位要全为一:11111=31。话说这个有什么作用呢?看了下面的例子,我也才明白这个在笔试中的作用。下面代码:
int f( int x, int y )
{
return ( x&y )+( ( x^y )>>1 )
}
问:f(729,271)=??
本题可以按照所谓的“笨方法”来做。按照上面的分析,我们知道x^y是729和271不同位的和,右移一位,就是除2。而x&y呢?你可以按照我刚分析的x^y就可以知道x&y是取x和y相同位的和的一半。所以上面的return返回的是x和y相同位的一半加上不同位的一半,就是x和y和的一般啦。即f(729,271)=(729+271)/2=500
第2个回答  2012-08-31
楼上的不对 结果不是这两个二进制数差的绝对值,你可以验证 3和5异或的结果是6而不是2

a^b = |a-b| (按位相减取绝对值,再按位累加)
第3个回答  2009-05-28
就是两个数按位异或咯
两个二进制数异或后的结果?还是个二进制数
第4个回答  2009-05-28
是这两个二进制数差的绝对值本回答被提问者采纳
相似回答