二进制运算问题,高人帮忙看看!

artman 2003-07-08 09:05:28
( x1 + x2 ) xor x2 = x3

现在已知 x1 和 x3 如可求得 x2的值?
...全文
57 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
artman 2003-07-09
  • 打赏
  • 举报
回复
我的问题不是逻辑运算。
我之前还真没注意到有无解的情况,谢谢!
HUNTON 2003-07-08
  • 打赏
  • 举报
回复
我解的情况是很多,比如 X1 = 0, X3 != 0,就肯定无解了
SeainBlue 2003-07-08
  • 打赏
  • 举报
回复
不过还是有很多情况无解的,当然实在一定范围内,比如8位或者16位

是不是所有位数以内都没有解,我现在无法确定
artman 2003-07-08
  • 打赏
  • 举报
回复
to SeainBlue(爱海):
你的方法最实际,我目前就是这么做的,可能这是最直接/最有效的办法。我需要的运算单位是字节,最大循环256次就够了,这种方法应该没问题。
这个问题不会无解吧,我只要得到一个x2的值就行了。

to DeautyFan(悲情浪子) GoldenSword(金错刀):
你们说的是逻辑运算。
SeainBlue 2003-07-08
  • 打赏
  • 举报
回复
次问题好像很多无解的情况

另外还有多解的情况:x1=x3=0
很显然( x1 + x2 ) xor x2 = x3

而无论x2是什么值
SeainBlue 2003-07-08
  • 打赏
  • 举报
回复
a=4,b=5,c = 13

b = !c???

不对吧
GoldenSword 2003-07-08
  • 打赏
  • 举报
回复
(a+b) XOR b = !((a+b)* b) = !(a+b)+!b = !a*!b+!b + !b(1+!a) = !b = c
-----> b = !c;
SeainBlue 2003-07-08
  • 打赏
  • 举报
回复
我的代码:
#include <stdio.h>
#include <stdlib.h>

void myXor(unsigned int x1,unsigned int x3)
{
unsigned int x2 = 0 ;
unsigned int i = 0 ;
for(x2 = 0 ; x2 < 65535 ; x2 ++)
{
if( ((x1+x2)^x2) == x3)
{
printf("%d\n",x2) ;
return ;
}
}
printf("Error!") ;
return ;

}

void main(void)
{
myXor(10,22) ;
}
无敌魔仙 2003-07-08
  • 打赏
  • 举报
回复
有这样的:
a xor b =a*(!b) + (!a)*b
!(a+b)=(!a)*(!b)
a*(!a)=0
无敌魔仙 2003-07-08
  • 打赏
  • 举报
回复
拜托如果你的等号是等于的意思的话:简化后是x1*(!x2)==x3你自己可以搞定了吗
SeainBlue 2003-07-08
  • 打赏
  • 举报
回复
如果是与运算,这道题就没有任何计算的意义了

楼主说对不对啊
SeainBlue 2003-07-08
  • 打赏
  • 举报
回复
看问题了!!!
问题问的是什么?
求解x2!

我的算法除了运算范围以外没有什么错误了
skybblue 2003-07-08
  • 打赏
  • 举报
回复
( x1 + x2 ) xor x2 = x3 如果是数学表达式,并且是逻辑运算,那么应该这样解释x1与(逻辑加)x2,然后再与x2进行异或运算的结果是x3,如果是这样的话SeainBlue(爱海)的算法就是错误的!

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧