Ultima modifica:
Tratto da "Il linguaggio C" di Brian W.Kernighan e Dennis M.Ritchie. Capitolo 3, paragrafo 6, esercizio 3.4.
Questo e' il codice a cui e' riferito:
La funzione in questione prende un numero n e lo trasforma in caratteri all'interno della stringa s . reverse() rovescia la la stringa che riceve in input .
Traccia:
In un sistema con complemento a due, la nostra versione di itoa non gestisce correttamente il massimo numero negativo ammesso in ingresso, cioe' il valore di n pari a - ( 2 ^ (dimensioneparola - 1)). Si spieghi il perche', e si apportino le modifiche necessarie per visualizzare tale valore correttamente, indipendentemente dal tipo di macchina.
Quesito ed osservazioni:
Credo di non aver capito appieno la traccia: prima di tutto non capisco se per complemento a due intende ricevere in ingresso un numero binario o dare in output un numero binario. Io l'ho interpretato come ricevere in input un numero in base decimale per poi darlo in output in forma binaria all'interno della stringa.
L'unico dettaglio che credo non permetta di gestire correttamente il valore e' che in binario non essendo rappresentabile '- 0', -00000000 stia a simboleggiare -1, dunque per tale ragione dovrebbe essere sufficiente apportare questa modifica:
E sostituire i due 10 con 2, chiaramente. Cosa ne pensate? Credete sia questa una possibile interpretazione e risoluzione?
Grazie in anticipo per le risposte.
Questo e' il codice a cui e' riferito:
C:
void itoa(int n, char s[])
{
int i, sign;
if((sign = n) < 0)
n = -n;
i = 0;
do
{
s[i++] = n % 10 + '0';
} while ((n /= 10) > 0);
if(sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
}
Traccia:
In un sistema con complemento a due, la nostra versione di itoa non gestisce correttamente il massimo numero negativo ammesso in ingresso, cioe' il valore di n pari a - ( 2 ^ (dimensioneparola - 1)). Si spieghi il perche', e si apportino le modifiche necessarie per visualizzare tale valore correttamente, indipendentemente dal tipo di macchina.
Quesito ed osservazioni:
Credo di non aver capito appieno la traccia: prima di tutto non capisco se per complemento a due intende ricevere in ingresso un numero binario o dare in output un numero binario. Io l'ho interpretato come ricevere in input un numero in base decimale per poi darlo in output in forma binaria all'interno della stringa.
L'unico dettaglio che credo non permetta di gestire correttamente il valore e' che in binario non essendo rappresentabile '- 0', -00000000 stia a simboleggiare -1, dunque per tale ragione dovrebbe essere sufficiente apportare questa modifica:
C:
if((sign = n) < 0)
if(++n != 0)
n = -n;
Grazie in anticipo per le risposte.