2009-07-08 32 views
5

tôi tínhĐối diện của Bitwise OR

c = a 'OR' b // bitwise OR operation here 

Bây giờ đưa ra chỉ giá trị của cb làm thế nào tôi có thể tính toán giá trị ban đầu của a?

+0

Chỉ cần thêm một số ví dụ- Tôi có x34 và tôi thực hiện HOẶC hoạt động witn x40 và tôi nhận được x74. Bây giờ với x40 và x74, cách lấy x34. cho một số giá trị, tôi thấy hoạt động xOR cho 'a' nhưng tôi thực sự không chắc chắn rằng nó sẽ luôn hoạt động x34 | x40 = x74 x74^x40 = x34 – Kapil

+0

Tại sao bỏ phiếu phủ định? Đó là một câu hỏi hoàn toàn rõ ràng, và lập trình tương đối của nó. Nếu nó không thể, ngay cả sau đó nó là một câu hỏi trả lời. –

+2

Nếu bạn thực hiện XOR giữa a và b, bạn sẽ dễ dàng tìm thấy nếu bạn biết b và c. Chỉ cần làm c XOR b và bạn nhận được a. Với một OR là không thể (xem câu trả lời dưới đây) – Burkhard

Trả lời

22

Điều này là không thể.

Một trường hợp đơn giản để chứng minh quan điểm của tôi (giả sử a, b, và c đều 1-bit):

Nếu 'b' là 1, 'c' sẽ luôn là 1, bạn không thể xác định giá trị của 'a'.

+1

Yeap, và tương tự cho AND. – sharptooth

1

Điều đó là không thể. Không có cách nào để xác định 'a' sẽ là gì

4

Bạn không thể quay lại một cách đáng tin cậy. Ví dụ: a = 0010 và b = 0011. a HOẶC b = 0011. Kết quả tương tự cũng đúng nếu ví dụ khác (ví dụ 0001 hoặc 0011).

1

từ quan điểm toán học, bạn không thể suy ra A từ C và B. nếu bit thứ n bạn có giá trị 1 trong C và B bạn không thể biết bit thứ n trong một bằng 0 hoặc 1

3

Kể từ a OR 1 luôn là 1 và a OR 0 luôn luôn là một bạn chỉ có thể tìm thấy giá trị của a nếu b là 0.

Edit: AND và OR là hoạt động lossy (không thể luôn luôn được đảo ngược). Trong khi đó, XOR và NOT không bị mất/đảo ngược.

2

Điều đó là không thể, hoặc hoạt động không thể hoàn nguyên. Có nhiều giá trị khác nhau của một giá trị giống nhau cho c.

Bạn có thể nhận được một giá trị có thể có bằng cách thực hiện và vận hành với phần bù của b.

a = c & ~b 
+1

nhấn mạnh vào "* giá trị có thể *" –