Simulazione del confronto senza l'utilizzo di primitive di confronto

1

Allo stesso modo in cui puoi simulare if statement e functions , mi chiedo se ci sia un modo per simulare gli operatori di confronto == , != , > , >= , < , <= .

Ad esempio, in JavaScript, invece di fare questo:

var x = a > b

Forse c'è un modo per farlo in un modo più primitivo, come una sorta di circuito logico o qualcosa del genere, o usando bit shift o qualcosa del genere. Volevo solo vedere se c'è un modo per simulare tali operazioni (solo fornire un esempio di una di esse sarebbe utile per capire il resto da solo).

    
posta Lance Pollard 26.07.2018 - 01:47
fonte

1 risposta

4

La sottrazione è il meccanismo fondamentale e più primitivo: a - b vs. a > b . Dopo la sottrazione di a-b la maggior parte delle CPU imposta alcuni flag in modo tale da poter determinare: result > 0 , result == 0 , result < 0 , che possiamo usare per la ramificazione condizionale.

La sottrazione, a - b , viene eseguita con l'aggiunta: a + -b , e, la negazione ( -b ) viene eseguita dal complemento più uno: ~b + 1 (per i numeri interi del complemento a due). Quindi, a - b è a + ~b + 1 . E con appropriati flag di carry possiamo determinare maggiore, uguale o minore, in modo da inferire la relazione di magnitudine.

Ora, a + ~b + 1 richiede un tre sommatore di input per il bit di ordine basso; tuttavia, qualsiasi aggiunta di byte / parole richiede sommatori di ingresso a tre bit (per accogliere due ingressi più un bit di trasferimento) per tutte le posizioni di bit, tranne il bit di ordine basso, dove non è presente alcun input di carry. Quindi, l'onere per +1 di negazione (per sottrazione) è discutibilmente minimo: che il bit di ordine basso ha bisogno dello stesso sommatore completo (input a 3 bit) di tutte le altre posizioni di bit.

(Il complemento è semplicemente un'inversione di ciascun bit sul posto, molto economico.)

    
risposta data 26.07.2018 - 02:35
fonte

Leggi altre domande sui tag