[Tech] numero di bit negli int

Franco Bagnoli bagnoli@dma.unifi.it
Ven 28 Maggio 2004 19:05:27 CEST


On Fri, 28 May 2004, Valerio Montagnani wrote:

> Sono alla ricerca di un formato giusto per rappresentare dati audio. 16
> bit sono giusti, per cui ho pensato agli int. Tuttavia ho letto su
> internet che non tutte le macchine rappresentano gli interi con 16 bit.
> 
> Vi chiederei la cortesia seguente: una macchina basata su un p4 intel
> lavora con int a 16 o a 32 bit? Nel caso usi i 32 bit devo dichiarare le
> variabili short int, per usarle a 16 bit?

la definizione di int, short, long, long long ecc. è stata fatta 
intenzionalmente generica. Ovvero, nemmeno i char sono garantiti di essere 
a 8 bit (c'erano delle macchine con i byte a 9 bit), anche se su questo 
ci si può scommettere che non cambi più. 

Questo vuol dire che se scrivi un programma che suppone una certa 
dimensione in bit, sei certo che tra qualche tempo, quando ti sarai 
dimenticato della questione, passerai il programma su un'altra macchina e 
non funzionerà (un po' come il baco del 2000). 

Quindi, o all'inizio del programma controlli quanto sono "larghi' i dati 
(con un sizeof, che puoi usare anche per scoprire quanti bit ci sono in un 
tipo: 


#include <stdio.h>

#define dimmi(type) printf("il tipo " #type " contiene %d bits\n", 
 8*sizeof(type)) 

main() {
 dimmi(int);
 dimmi(char);
}

)

oppure, meglio, usi la "libreria" stdint.h che contiene le definizioni di 
tipo appropriate: 

uint16_t, uint8_t ecc. ecc.



-- 
Franco Bagnoli (franchino) <bagnoli@dma.unifi.it> 
virtual location: Dipartimento di Energetica "S. Stecco"
ultra-virtual affiliation: Centro Dinamiche Complesse (CSDC-Firenze)
real location: Dip. Matematica Applicata "G. Sansone", Universita' Firenze,
Via S. Marta, 3 I-50139 Firenze, Italy. Tel. +39 0554796422, fax: +39 055471787




Maggiori informazioni sulla lista flug-tech