É possível definir todos os operadores bit a bit usando um 'bit a bit nand' semelhante a como toda a lógica booleana pode ser criada usando apenas 'boolean nand'?

9

Nand é conhecido como um portão lógico 'universal', porque permite definir todos os outros portões lógicos booleanos:

not(x) = nand(x,x)
and(x, y) = not(nand(x, y))
or(x, y) = nand(not(x), not(y))
nor(x, y) = not(or(x, y))
xor(x, y) = nand(nand(a, nand(a, b)), nand(b, nand(a, b)))

Isso é conhecido como nand-logic e é comumente usado em computadores modernos porque um transistor pode ser feito para se comportar como um nand-gate.

Gostaria de saber se é possível fazer algo semelhante com as operações bit a bit. Pode um exemplo bit a bit NAND (bnand) ser usada para definir bnot, bor, band, bnor, bxor? Existe uma operação bit a bit universal?

Qqwy
fonte

Respostas:

13

No nível do hardware, não há diferença entre bit a bit e lógico. Então sim. Uma operação lógica é apenas uma operação bit a bit em um único bit.

Martin Maat
fonte
2

Na maioria dos microprocessadores modernos, as operações bit a bit são implementadas nativamente, para que não haja benefício em ter uma operação NAND.

Por exemplo, o conjunto de instruções x86 possui: AND , OR , XOR , NOT . Todos eles são executados em um único ciclo, tanto quanto eu sei, para que não haja nenhum benefício substituindo-os por várias operações NAND. Ele também possui ANDN, que é um equivalente, ((NOT x) AND y)que pode ser gerado por um compilador de otimização inteligente para ganhar um ciclo.

O movimento RISC tentou promover um conjunto de instruções reduzido para uma arquitetura mais simples e com melhor desempenho. A idéia era que os compiladores precisariam combinar instruções mais simples e rápidas. Parece, no entanto, que, além de alguns processadores experimentais ou de ensino, a maioria fornece NAND nativamente e operações bit a bit usuais (por exemplo, PowerPC ou ARM ).

Christophe
fonte
Eu realmente não tenho certeza de como os operadores booleanos são implementados nas CPUs atualmente, mas costumava ser bastante comum usar um mux de 4 para 1, alimentando "a tabela da verdade" como as 4 entradas e, em seguida, use os dois bits para opere como o seletor da saída. Oferece a você um único circuito que pode ser usado para todas as 16 funções booleanas de dois operandos.
Vatine 1/09/16
2
O fato de OR, XOR e NOT serem implementados "nativamente" e não demorar mais que um único ciclo de clock não diz nada sobre se eles são construídos usando apenas circuitos NAND ou nem. Eu suspeito que eles são construídos usando apenas NANDs hoje em dia porque os transistores são muito baratos e muito rápidos. O método 4 para 1 do Vatine é otimizado para o uso de um pequeno número de transistores, o que é inútil na era dos nanômetros.
Martin Maat
O RISC ficou sem sentido com o tempo. Quando surgiu, instruções complexas típicas levaram vários ciclos de relógio, como 10 ou mais. E não se tratava de OR / AND / NOT, eles já eram rápidos e considerados "simples" e essenciais para qualquer CPU, de modo que certamente não seriam descartados por um processador RISC. Hoje, instruções complexas demoram menos de um ciclo de clock (devido à canalização e multi-threading / multi-core.
Martin Maat