2010-04-02 40 views
9

Làm thế nào để đảo ngược bitwise AND (&) trong C?Làm thế nào để đảo ngược bitwise AND (&) trong C?

Ví dụ tôi có một hoạt động trong C như thế này:

((unsigned int)ptr & 0xff000000)) 

Kết quả là 0xbf000000. Những gì tôi cần vào lúc này là cách đảo ngược ở trên, tức là xác định ptr bằng cách sử dụng kết quả từ hoạt động và tất nhiên là 0xff000000.

Có cách nào đơn giản để thực hiện điều này trong C không?

Trả lời

22

Bitwise & không thể đảo ngược:

0 & 1 = 0 
0 & 0 = 0 
3

Không thể. Bitwise & của 0xff000000 là một hoạt động mất mát. Bạn mất vĩnh viễn 24 bit thấp hơn.

15

Bạn không thể làm điều đó vì bạn đã vứt bỏ thông tin (ví dụ: bit) - bạn không thể có được thông tin trở lại từ đâu cả.

Lưu ý rằng cả hai AND (&) và OR (|) đều mang tính hủy diệt. Các thao tác Boolean duy nhất có thể đảo ngược là XOR (^) và NOT (~).

1

Bạn chỉ có thể đảo ngược XOR, vì nó không phá hủy.

Cả OR và AND đều phá hoại.

+5

Bạn cũng có thể đảo ngược "không". –

+0

Vâng, tôi xấu tôi để cho phiếu đó :-) – Steffen

Các vấn đề liên quan