数码之家

 找回密码
 立即注册
搜索
查看: 3610|回复: 9

二进制数算法求救

[复制链接]
发表于 2021-6-8 20:20:51 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如果有一个未知的二进制数A和已知的二进制数B,有结果C=A|B;想知道怎样通过C和B换算出A?
例如:A=1110,  B=1011, C=A|B=1111。我想通过C和B的数据反向推算数据A,不知道是否有算法。希望高手指点一下,先谢了!!
发表于 2021-6-8 20:40:23 | 显示全部楼层
本帖最后由 zzy_85569381 于 2021-6-8 20:48 编辑

这情况太多了,只要不同时为0,结果都是1(A=1110,  B=1011, C=A|B=1111)
比如先知道 B=1011, C=A|B=1111  ,那A=0100,0101,0110,0111,1100,1101,1110,1111.
只要第二位是1,其他三位随便玩,也就是能玩出2的3次方等于8种情况。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-8 20:55:52 | 显示全部楼层
zzy_85569381 发表于 2021-6-8 20:40
这情况太多了,只要不同时为0,结果都是1(A=1110,  B=1011, C=A|B=1111)
比如先知道 B=1011, C=A|B=11 ...

多谢,仿佛明白了,想还原数据A是没机会了。
回复 支持 反对

使用道具 举报

发表于 2021-6-9 17:40:36 | 显示全部楼层
你这相当于多元方程求解,但是只有一条算式不够
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-9 19:08:02 | 显示全部楼层
yjfxue 发表于 2021-6-9 17:40
你这相当于多元方程求解,但是只有一条算式不够

多谢,业余玩单片机好多年,编程只会一些比较、判断,涉及到数据运算的时候就迷糊。
回复 支持 反对

使用道具 举报

发表于 2021-6-10 17:26:09 | 显示全部楼层
别纠结了,算不出来的。
不存在这样的算法,多个解等于无解。
回复 支持 反对

使用道具 举报

发表于 2021-6-10 18:51:07 | 显示全部楼层
1 | 0
0 | 1
1 | 1
都是1,所以某位为0有3种可能
                  某位为1倒是只有一种可能 1|1

数学上说,不存在反函数,不是一一对应的。
位数少,可以穷举把所有可能列出来,位数多就没戏了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-11 09:32:01 | 显示全部楼层
jjbboox 发表于 2021-6-10 17:26
别纠结了,算不出来的。
不存在这样的算法,多个解等于无解。

多谢,已经不纠结了,这个想法确实不对路子,只能保存好原始数据后在应用不能反向转换的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-11 09:43:48 | 显示全部楼层

多谢你的详细分析,因为受10进制加减运算的思维定式的影响,总以为两个数经过运算后通过结果与一个运算因子的反向运算总能还原另一个运算因子,而这个二进制是相或运算的结果是有1得1、全0得0,结果中的1就说不清是谁的了。
回复 支持 反对

使用道具 举报

发表于 2021-6-11 12:17:11 来自手机浏览器 | 显示全部楼层
慕名而来 发表于 2021-6-11 09:43
多谢你的详细分析,因为受10进制加减运算的思维定式的影响,总以为两个数经过运算后通过结果与一个运算因 ...

可以反向的运算在二进制中也是存在的,典型例如异或XOR,对应 ^ 运算符。
C= A^B,反解是 A= C^B
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-5-29 10:52 , Processed in 0.249600 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表