Oppure

Loading
14/09/10 18:54
Pitagora
Studiavo gli operatori bitwise, quando per stranezza ho dei dubbi fortissimi sui dati tipi char. Pensavo che i char potevano contenere solo caratteri... Invece mi sbagliavo! Si possono fare delle complete operazioni matematiche, in più possono contenere anche caratteri. Una cosa che non capisco è questa:

...
int c;
c = getchar();
...


questo codice aspetta un carattere lo memorizza e lo inserisce nella variabile int che però non è char quindi esegue il cast in int e inserisce il valore del carattere corrispondente in ascii nella var c giusto?
aaa
14/09/10 19:10
giuseppe93
si giusto! infatti la funzione getchar non restitiusce una variabile char ma un integer. infatti se se fai:
char c=getchar();

viene assegnato un numero a c che poi indicherà il carattere char specifico.
di conseguenza è intuibile che si possono fare assegnazioni come
char c=1;

in questo caso c avrà il carattere ascii numero 1, che corrisponde ad una faccina!
quindi concludendo si possono usare le var char come se fossero integer
p.s. non hai mai visto qualcosa come
for(char c='a';c<'z';c++) {}
;)

aaa
15/09/10 11:17
Pitagora
Con i char si possono fare anche operazioni matematiche. Con gli int oltre a fare operazioni operazioni matematiche può contenere un carattere, in ascii intendono. Giusto? Quel ciclio for incrementa il suo valore ascii che poi successivamente riviene convertito in carattere. Giusto?
aaa
30/09/10 16:34
TheWorm
Non so se sia solo mio il problema, ma non ho capito granchè. Parlate in italiano per favore!
Cooomunque, se ho interpretato correttamente, questo dovrebbe togliere alcuni dubbi:

In C è possibile utilizzare le variabili di qualunque tipo intero (char, int, short, long...) per rappresentare caratteri. In particolare, vengono impiegati a questo scopo sia char (grande 1 byte) che int (grande 4 byte). In alcune situazioni, per ragioni tecniche può essere richiesto un int. Costanti come 'a' e '+', pensate di solito come caratteri, sono di tipo int e non di tipo char (in C non esistono costanti di tipo char).
Oltre a rappresentare caratteri, una variabile di tipo char può essere utilizzata per memorizzare interi di piccola dimensione: poichè ogni char occupa un byte e solitamente un byte equivale a 8 bit, un char può contenere 256 valori differenti (da 0 a 255). Ex:

char c = 97;
printf("%d\n", c);
printf("%c\n", c);


in questo esempio il primo printf stamperà il valore di c, interpretato come numero intero (quindi 97), il secondo stamperà il valore di c interpretato come un carattere, seguendo la tabella ASCII (quindi 'a').

Il tipo int è considerato il tipo "naturale" per lavorare con gli interi (su 4 byte si possono memorizzare numeri da -2147483648 a 2147483647).

In parole povere, entrambi i tipi char e int possono essere adoperati per "operazioni matematiche", tenendo però conto che di solito il massimo numero memorizzabile in un char è 255, mentre con un int si hanno possibilità di gran lunga maggiori. E in entrambi si possono memorizzare caratteri, anche se come detto prima, a volte è preferibile l'utilizzo di un int: ad esempio per caratteri multibyte (ex: EOF). Un char è utilizzato (almeno a mio avviso) per un minor consumo di memoria.

NB: quello che ho detto vale per le architetture a 32 bit!
Ultima modifica effettuata da TheWorm 30/09/10 16:40
aaa