Sfogliando le dispense consigliate da raffamaiden mi è caduto l'occhio sul seguente:
• char: (8 bit - 1 byte) Valori da 0 a 255 che rappresentano la codifica ASCII estesa del carattere corrispondente
• int (16bit - 2 byte) Rappresentano gli interi relativi. Valori in complemento a 2 da - 32768 a + 32767
Entrambe le affermazioni sono sbagliate per i seguenti motivi:
1. La dimensione in bit dei tipi interi non è prescritta dallo standard C. Viene richiesta una dimensione minima, che nel caso di char è 8 bit e nel caso di int è 16bit, ma l'effettiva dimensione può anche essere diversa. Sono per esempio esistiti dei computer a 36bit e ogni "byte" (nel senso del C) era quindi composto da 9 bit (
come si può leggere qui). Ogni tipo su un computer di questo tipo avrà cioè una dimensione che multipla di 9 bit. Ma se la dimensione dei char sulla maggior parte dei computer odierni è di 8bit, lo stesso non si può dire degli int. Anzi, la dimensione di un int sulla maggior parte dei sistemi a 32 o 64 bit è 32bit!!! L'affermazione del tuo professore non vale quindi neanche sul computer che usa quotidianamente..
2. I char non sono necessariamente senza segno. Su alcuni computer (e alcuni compilatori permettono di passare da una rappresentazione all'altra) sono infatti con il segno rappresentando quindi numeri da -128 a 127 (ammettendo 8 bit e la rappresentazione a complemento a 2, nessuno dei quali è garantito). Quando si vuole lavorare con i char come se fossero numeri, conviene usare direttamente unsigned char e signed char (l'unico caso in cui signed ha davvero senso).
3. Per tutte le ragioni di cui ho parlato precedentemente, un char non usa necessariamente ASCII extended.
Sarà pignoleria la mia, ma mi chiedo come sia possibile che nessuna delle dispense di corsi che insegnano il C che mi sia capitato di leggere sia priva di errori di questo tipo. Capisco che non si possa spiegare tutto, ma è possibile che ci siano sempre gli stessi errori e/o inesattezze? Mi ritengo ormai fortunato se il codice inserito nelle dispense è corretto e compilabile.