Dubbi Rappresentazione di numeri interi

di il
3 risposte

Dubbi Rappresentazione di numeri interi

'sera.
Stavo svolgendo un esercizio di programmazione, quando mi sono accorto di una cosa.
Nel programma devo lavorare con "numeri di telefono" che quindi sono abbastanza lunghi (la traccia dice che sono massimo di 15 caratteri);
Non devo usare il tipo 'int', vero? Dovrei usare il long int? O c'è il rischio di sforare anche così?
Poi non capisco... se sono massimo 15 caratteri, vuol dire che i bit che occupa sono massimo 8x15 o non centra niente? Sono ignorante in materia e faccio spesso confusione..
:/
Grazie..

3 Risposte

  • Re: Dubbi Rappresentazione di numeri interi

    Non sorprenderti se ti dico che il 'long int' è identico ad 'int' , ovvero occupano entrambi 4byte in memoria, quindi la prima risposta è no, non usare neanche 'long int'.
    Poi non capisco... se sono massimo 15 caratteri, vuol dire che i bit che occupa sono massimo 8x15 o non centra niente?
    dipende. Come detto un int occupa solo 4byte e rappresenta al massimo 2^32 valori, quindi più o meno 10 cifre. se invece usi 'char' allora occupi come dici tu 15byte in memoria, uno per ogni carattere.
    Se usi C++, ti consiglio l'uso della classe 'string' definita in <cstring> , altrimenti se usi C usa tranquillamente un array di 'char' facendo attenzione ad allocare un byte in più per il carattere di fine stringa rappresentato da '\0' (nel tuo caso essendo un numero di telefono lungo 15 cifre, devi usare un array di 16 'char').
  • Re: Dubbi Rappresentazione di numeri interi

    E quindi diciamo a che serve il "long"?
    Sono andato a controllare ed effettivamente int e long int occupano 32 bit !! E anche i numeri rappresentabili hanno lo stesso 'range' da -+2147483648! Bha!
    Comunque uso C, ma perché dovrei farne di un intero un array? Cioè devo prendere il 'numero di telefono' come una stringa?
    Non ci avevo pensato...
  • Re: Dubbi Rappresentazione di numeri interi

    xxavy ha scritto:


    E quindi diciamo a che serve il "long"?
    Storicamente il tipo int è calibrato sul bus dati della CPU. Se la CPU è a 16 bit, un int sarà di 16 bit, se la CPU è a 32bit l'int sarà a 32bit (non ho informazioni su altri tipi di architetture, ma non escludo che se la CPU è 64bit o superiore l'int segua quella strada).
    Il long int e lo short int nascono con lo scopo di assicurare dimensioni precise al dato in esame:
    uno short int avrà sempre 16bit, un long int (se non ricordo male lo standard) avrà almeno dimensione pari o superiore a un int.
    Ne consegue che un long int avrà dimensioni 32bit sia su CPU a 16bit sia su CPU a 32bit.
    E' possibile comunque usare un numero a 64bit se il tuo compilatore supporta il long long
    o __int64 su piattaforme MS. Se poi disponi dell'header stdint.h risolvi la discrepanza usando int64_t
    ma perché dovrei farne di un intero un array? Cioè devo prendere il 'numero di telefono' come una stringa?
    Così puoi acquisire numeri telefonici di questo tipo:
    0123-456789
    (Nota il trattino)
Devi accedere o registrarti per scrivere nel forum
3 risposte