Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - variabili tipo char
Forum - C/C++ - variabili tipo char

Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 20:54
Martedì, 14/09/2010
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:

Codice sorgente - presumibilmente C/C++

  1. ...
  2. int c;
  3. c = getchar();
  4. ...



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?

PM Quote
Avatar
giuseppe93 (Ex-Member)
Pro


Messaggi: 166
Iscritto: 02/08/2009

Segnala al moderatore
Postato alle 21:10
Martedì, 14/09/2010
si giusto! infatti la funzione getchar non restitiusce una variabile char ma un integer. infatti se se fai:
Codice sorgente - presumibilmente C/C++

  1. 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
Codice sorgente - presumibilmente C/C++

  1. 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
Codice sorgente - presumibilmente Plain Text

  1. for(char c='a';c<'z';c++) {}

;)


PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 13:17
Mercoledì, 15/09/2010
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?

PM Quote
Avatar
TheWorm (Member)
Rookie


Messaggi: 24
Iscritto: 13/09/2009

Segnala al moderatore
Postato alle 18:34
Giovedì, 30/09/2010
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:

Codice sorgente - presumibilmente C/C++

  1. char c = 97;
  2. printf("%d\n", c);
  3. 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 il 30/09/2010 alle 18:40
PM Quote