Emula 12bit uint in c #

1

Recentemente ho dovuto fare un test di codifica. La domanda in sé era abbastanza facile. prendi una stringa di numeri e +, * fai un ciclo attraverso di essa, se il personaggio è un numero, aggiungilo a una pila, se un'operazione fa saltare due oggetti dalla pila, esegui l'operazione e rimetti il risultato in pila.

Tuttavia, la piccola e complicata stampa ha specificato che i valori dello stack store sono a 12 bit senza segno.

Questo mi ha dato un sacco di problemi Ho provato a cambiare bit per bit avanti e indietro ma ho ottenuto numeri negativi e probabilmente ho dovuto fare solo% 4096 prima che finisse il tempo.

Inoltre mi sono reso conto che in realtà avrei dovuto creare uno speciale 12 bit per aggiungere e moltiplicare gli operatori, o sarei ok solo a convertire un risultato a 16 bit?

Ho perso un trucco?

Qual è il modo migliore per emulare matematica a 12 bit in c #?

    
posta Ewan 30.05.2015 - 12:02
fonte

1 risposta

5

Una semplice operazione come

  PushToStack(uint32 value)
  {
     _stack.Add(value % 4096);
  }

dovrebbe essere sufficiente, purché si usi questa funzione esclusivamente per spingere i valori nello stack.

Tieni presente che (a+b)%n == (a%n + b%n)%n e (a*b)%n == ((a%n) * (b%n))%n per a e b > = 0 e n > 0.

Inoltre, quando aggiungi o moltiplica due valori dallo stack, i valori di input sono già 12 bit, quindi l'output ha un massimo di 24 bit, quindi puoi farlo usando aritmetica a 32 bit senza segno o senza ottenere un overflow. Pertanto non si verificherà mai alcun valore negativo e qualsiasi tipo di spostamento dei bit non è necessario. E non appena il risultato viene nuovamente inserito nello stack, diventa nuovamente 12 bit.

    
risposta data 30.05.2015 - 13:06
fonte

Leggi altre domande sui tag