2016-12-20 2 views
0

내가 묻고 싶습니다 : A, BC은 이진수입니다. C = A & B (&AND 인 경우) ABC에서 복구 할 수 있습니까?주어진 B와 C를 사용하여 "A & B = C"에서 A를 복구 할 수 있습니까?

A의 정보가 작동을 통해 손실된다는 것을 알고 있습니다. B <...> C = A과 같은 함수를 만들 수 있고 얼마나 복잡 할 수 있습니까? 예를 들어

: AB

A = 0011 
B = 1010 
C = A & B = 0010

C의 2 비트 1이다, 즉 2 비트 1이어야한다. 그러나 다른 비트에는 복구 할 정보가 없습니다.

미리 감사드립니다.

+0

'C = A & B' 그러면 'A'는 결코 잃어 버리지 않습니다 - 할당이 의미하는 바에 대해 읽으십시오. – artm

+4

불가능합니다. – kaylum

+0

''xor''을 사용할 수 있지만''and'' 및''or'' 연산은 파괴적입니다. – Shadow

답변

-1

A을 복구 할 수 없지만 A = (X & ~B)^C을 작성할 수 있습니다. 여기에서 X은 무엇이든 가능합니다 (모든 A의 값을 제공합니다).

물론 이것은 BC에 대해서만 C & ~B == 0과 같이 작동합니다.

이것은 매개 변수화 된 솔루션입니다. 파이썬의 예

>>> A = 32776466 
>>> B = 89773888 
>>> C = A & B 
>>> C 
22020352 
>>> X = 1234567890 # arbitrary value 
>>> U = (X & ~B)^C 
>>> U 
1238761874 
>>> U & B  # same result as A & B 
22020352 
+0

나는이 수식의 아름다움을 이해하지 못하는 사람에 의해 downvoted되었습니다 : ( – Gribouillis

+0

또는 질문과 관련이 무엇인지 이해할 수없는 사람. 다른 가능성이 있습니다. – EJP

+0

@EJP 매우 간단합니다, 일반적으로 'C & B == 0'일 때, 미지의'A '를 갖는 방정식'A & B == C'는 몇 가지 해를 갖는다. 모든 해의 집합은'(X & B)'C'는'X'가 가능한 모든 값을 취할 때'A, B, C'가 부울이 아니라 c와 같은 정수이고이 정수에 대해 비트 연산을 수행한다고 가정합니다. 그러나 이것이 암시 된 것 같습니다 – Gribouillis

8

아니요, 불가능합니다. 당신에 대한 진실을 테이블에서이 문제를 볼 수 있습니다 AND :

A B C (A & B) 

0 0 0 
0 1 0 
1 0 0 
1 1 1 

당신은 B가 0 인 것을 알고 가정 및 C는 0 수있을 1 또는 0, 그래서는 B로부터 추론 할 수 없으며 C.

입니다
+0

답장을 보내 주셔서 감사합니다. 나는 AND 연산자의 진리표가 C의 정보가 부족함을 나타냅니다. OR, XOR, NAND, ...의 조합이 B와 C로부터 A를 복구 할 수 있다고 생각합니까? –

+4

아니요. B와 C가 0 인 경우 A는 1 또는 0 일 수 있으므로 테이블에 * A * 정보가 없음을 나타 내기 때문에 불가능합니다. B가 0이면 C의 값은 A의 값에 관계없이 0이됩니다. 다시 말해서 AND 연산은 0과 1 값에 대한 곱셈 테이블과 같습니다. A * 0 = 0을 알면 어떻게 할 수 있습니까? 당신은 A를 풀 수 있습니까? 그것은 불가능. – samgak

5

1을 갖는 A 비트 만 해당 비트 B에서 복구 할 수 있습니다. 0을 가지고 B의 비트를 위해 C의 비트 어쨌든 제로 때문에 A가 해당 위치에 무슨 문제가되지 않습니다 제로 또는 사람이 될 수 x 표시 A

A = 1xx0x011x0 
B = 1001011101 
    ---------- 
C = 1000001100 

포지션; 그들 안에있는 정보는 어느 쪽이든 잃어 버리게 될 것입니다.

+0

답장을 보내 주셔서 감사합니다. 나는 AND 연산자의 진리표가 C의 정보가 부족함을 나타냅니다. OR, XOR, NAND, ...의 조합이 B와 C로부터 A를 복구 할 수 있다고 생각합니까? –

+0

@ ThuanN. 정보가 사라지고 숨겨진 것이 아닙니다. 'x' 포지션에 무엇이 있었는지 상관 없기 때문에 당신은 그것을 "복구"할 수 없습니다. 그것은'A * 0'의 결과에서'A'를 되 찾는 것과 같습니다. – dasblinkenlight

2

C 변수가 아닌 이진 논리를 말하는 것으로 가정하면 아니오입니다.

고려 : a=0111, b=1010 때문에 c=0010

그래서 당신은 이제 당신이 a을 찾을 수있는 방법을 b=1010, c=0010 있나요?

c의 가장 왼쪽 비트는 b에서 1 그래서 우리가 당신이 무엇인지 말할 수 없다 b에 0, 그것은 c의 두 번째 비트가 0 0 해야 a을 알고있다, 0이다 a (1 또는 0은 c에서 0으로 연결됨)

이 시점에서 우리는 당신이 그것을 할 수 없다는 것을 증명했습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 AND 연산자의 진리표가 C의 정보가 부족함을 나타냅니다. OR, XOR, NAND, ...의 조합이 B와 C로부터 A를 복구 할 수 있다고 생각합니까? –

+0

"A & B = C"와 "A | B = D"가있는 경우와 마찬가지로 B C와 D에서 A를 알아낼 수 있습니까? – John3136

2

아니요, 고유 한 해결 방법이 없기 때문입니다. B와 동일한 비트를 가진 A의 값은 다른 비트와 관계없이 방정식을 만족시킵니다.

+0

답장을 보내 주셔서 감사합니다. 나는 AND 연산자의 진리표가 C의 정보가 부족함을 나타냅니다. OR, XOR, NAND, ...의 조합이 B와 C로부터 A를 복구 할 수 있다고 생각합니까? –

+0

아니요. 이미 언급 한 이유로 인해 고유 한 해결책이 없습니다. 당신이 묻는 것은 선험적으로 불가능합니다. 당신은이 초등부를 이해하지 못한 것 같습니다. – EJP

1

이것은 방정식에 관한 질문입니다. 자유도가 0이 아니기 때문에 불가능합니다. a + b = 10 - a가 무엇이고 b가 무엇인지 묻는 것과 같습니다.