2016-12-20 19 views
0

Я хотел бы спросить: с A, B и C - любое двоичное число. После получения C = A & B (& - AND оператор), есть ли возможность для восстановления A от B и C?Есть ли возможность восстановить A в «A & B = C» с данными B и C?

Я знаю, что информация A будет потеряна в результате операции. Можем ли мы сформировать такую ​​функцию, как B <...> C = A, и насколько она может быть сложной?

Например:

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

2-й бит C является 1, т.е. второй бит A и B должны быть 1. Однако другим битам не хватает информации для восстановления.

Заранее спасибо.

+0

'C = A & B' то' A' никогда не теряется - прочитайте о том, что означает назначение – artm

+4

Нет, это невозможно. – kaylum

+0

Вы можете использовать операции '' xor'', но '' и '' и '' или'' являются деструктивными. – Shadow

ответ

-1

Вы не можете восстановить A, но напишите A = (X & ~B)^C. Здесь X может быть любым (и он дает все A).

Конечно, это будет работать только для B и C таких, что C & ~B == 0.

Это параметризованное решение. Пример в python

>>> 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

Я был замечен кем-то, кто не понимает красоту этой формулы :( – Gribouillis

+0

Или кто не понимает, что это касается вопроса. Есть и другие возможности. – EJP

+0

@EJP Это очень просто, в общем , когда 'C & ~ B == 0', уравнение' A & B == C' с неизвестным 'A' имеет несколько решений. Набор всех этих решений можно описать как набор' (X & ~ B)^C', когда 'X' принимает все возможные значения. Здесь предполагается, что' A, B, C' не являются булевыми, а скорее c-подобными целыми числами, а также выполняют побитовые операции над этими целыми числами, но я думаю, что это подразумевается на вопрос. – Gribouillis

8

Нет, это невозможно. Вы можете увидеть это из таблицы истинности для И:

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

Благодарим вас за ответ. Я знаю, что таблица истинности оператора И указывает на отсутствие информации С. Как вы думаете, комбинация OR, XOR, NAND, ... может восстановить A из B и C? –

+4

Нет, это не так, потому что в случае, когда B и C равны 0, A может быть либо 1, либо 0, поэтому в таблице указывается отсутствие информации * A *. Если B равно 0, то C будет 0 независимо от значения A. Подумайте об этом по-другому: операция AND эквивалентна таблице умножения для значений 0 и 1. Если вы знаете, что A * 0 = 0, то как можно вы решаете для A? Это невозможно. – samgak

5

Вы можете восстановить только биты A, которые имеют 1 s в соответствующих битах B. Для битов B, которые имеют нули не имеет значения, что A имеет в соответствующем положении, потому что бит в C будет равен нулю в любом случае:

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

Положения A отмеченные x могут быть нули или единицы; информация в них будет потеряна в любом случае.

+0

Благодарим вас за ответ. Я знаю, что таблица истинности оператора И указывает на отсутствие информации С. Как вы думаете, комбинация OR, XOR, NAND, ... может восстановить A из B и C? –

+0

@ThuanN. Информация ушла, а не скрыта. Вы не можете «восстановить» его, потому что неважно, что было на позициях 'x'. Это похоже на попытку восстановить 'A' из результата' A * 0'. – dasblinkenlight

2

Предполагая, что вы просто говорите двоичную логику, а не переменные C, то нет.

Рассмотрим: a=0111, b=1010 поэтому c=0010

Итак, вы b=1010, c=0010 так как теперь вы можете найти a?

Самый левый бит в c является 0, в b это 1, поэтому мы знаем a должно быть 0 Второй бит в c является 0, в b это 0, так что вы не можете сказать, что это было в a (либо 1, либо 0 приводит к 0 в c)

На этом этапе мы доказали, что вы не можете этого сделать.

+0

Благодарим вас за ответ. Я знаю, что таблица истинности оператора И указывает на отсутствие информации С. Как вы думаете, комбинация OR, XOR, NAND, ... может восстановить A из B и C? –

+0

Как и в случае, если у вас были «A & B = C» и «A | B = D», вы могли бы найти A из B C и D ?. – John3136

2

Нет, потому что нет единственного решения. Любое значение A, которое имеет те же биты, что и B, удовлетворяет уравнению независимо от других бит.

+0

Благодарим вас за ответ. Я знаю, что таблица истинности оператора И указывает на отсутствие информации С. Как вы думаете, комбинация OR, XOR, NAND, ... может восстановить A из B и C? –

+0

Нет, я не знаю, по этой причине я уже сказал: нет единственного решения. То, что вы просите, * априори * невозможно. Кажется, вы не поняли эту элементарную точку. – EJP

1

Это вопрос об уравнениях. Это невозможно, так как степень свободы не равна нулю. Это то же самое, что и запрос a + b = 10 - что такое a и что такое b?

 Смежные вопросы

  • Нет связанных вопросов^_^