In this case, I see that it works, but I'm not sure what the logic is? And I'm not sure I can create my own bitwise operations like this from scratch. How to start thinking in bits?
- . , , , - . (, , , , ).
, . .. A B. (0 - A, 1 - B)
1 . , , :) (? 2 ^ (2bits * 3inputs) = 64 :( 2 ^ (3bits * 3inputs) = 512 : (( )
, , 1 100% . Infact :)
| A | B | M || R |
============++====
| 0 | 0 | 0 || 0 |
| 0 | 0 | 1 || 0 |
| 0 | 1 | 0 || 0 |
| 0 | 1 | 1 || 1 |
| 1 | 0 | 0 || 1 |
| 1 | 0 | 1 || 0 |
| 1 | 1 | 0 || 1 |
| 1 | 1 | 1 || 1 |
, , .
? : KMaps . , ?:)
, R , :
| A | B | M || R |
============++====
| 0 | 1 | 1 || 1 |
| 1 | 0 | 0 || 1 |
| 1 | 1 | 0 || 1 |
| 1 | 1 | 1 || 1 |
:
R = (~A & B & M) |
( A & ~B & ~M) |
( A & B & ~M) |
( A & B & M) |
, , : , . , - nthere.
python:
a = 0xAE
b = 0x64
m = 0xF0
r = (~a & b & m) | ( a & ~b & ~m) | ( a & b & ~m) | ( a & b & m)
print hex(r)
:
0x6E
. 0x6E, 01101110b.
! . (ps, ~ r , . , r 0).
, , " ", Disjunctive Normal Form, DNF , . . - , , , 500000 Uni ' CS, . ( :))
, ( , ):
(~a & b & m) | ( a & ~b & ~m) | ( a & b & ~m) | ( a & b & m)
|= ((~a & b & m) | ( a & ~b & ~m)) | ( a & b & ~m) | ( a & b & m)
, :
((~a & b & m) | ( a & ~b & ~m))
|= (~a | (a & ~b & ~m)) & (b | ( a & ~b & ~m)) & (m | ( a & ~b & ~m))
|= ((~a | a) & (a | ~b) &( a | ~m)) & (b | ( a & ~b & ~m)) & (m | ( a & ~b & ~m))
|= (T & (a | ~b) &( a | ~m)) & (b | ( a & ~b & ~m)) & (m | ( a & ~b & ~m))
|= ((a | ~b) & (a | ~m)) & (b | ( a & ~b & ~m)) & (m | ( a & ~b & ~m))
.. .. , . - choice,
r = (a & ~m) | (b & m)
! . , , XOR, ? , , and or - 4 (1 or, 2 and, 1 neg), r = a ^ ((a ^ b) & mask) 3 (2 xor, 1 and).
, kmaps? , , , .:) Google . , , - , .
? , , :
| A | B | M || R |
============++====
| X | X | 0 || A |
| X | X | 1 || B |
, 64 ?
| A1| A0| B1| B0| M1| M0|| R1| R0|
========================++========
| X | X | X | X | 0 | 0 || A1| A0|
| X | X | X | X | 0 | 1 || A1| B0|
| X | X | X | X | 1 | 0 || B1| A0|
| X | X | X | X | 1 | 1 || B1| B0|
4 :)
( X " ".) Kmap. , , [.. , ].
, , .
.