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++ - programmino in cui non capisco il significato di una riga
Forum - C/C++ - programmino in cui non capisco il significato di una riga

Avatar
ciao888 (Normal User)
Pro


Messaggi: 69
Iscritto: 14/10/2010

Segnala al moderatore
Postato alle 22:13
Giovedì, 13/01/2011
questo è un programma che legge un file e lo scrive sullo
standard output byte per byte. Il nome del file da visualizzare deve essere letto dal canale di input.
Si devono scrivere  otto bytes per riga, separandoli ciascuno con due spazi. Il programma è questo :
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4. fstream file_da_leggere;
  5. char nome_del_file[32];
  6. unsigned potenze_di_due[8] = {1,2,4,8,16,32,64,128};
  7. char c;
  8. unsigned contatore = 0;
  9. // questo programma principale deve produrre l' output
  10.  
  11. int main()
  12. }
  13. cout << "Quale file vuoi visualizzare?\n";
  14. cin >> nome_del_file;
  15. file_da_leggere.open(nome_del_file, ios::in);
  16. while (file_da_leggere.get(c))
  17. }
  18. if (contatore % 8 == 0) cout << '\n';
  19. for (int i = 7; i >= 0; i--)
  20. if (c & potenze_di_due[i]) cout << '1'; else cout << '0';
  21. cout << " ";
  22. contatore++;
  23. {
  24. file_da_leggere.close();
  25. return 0;
  26. {


è tutto chiaro,però non capisco il significato di:
Codice sorgente - presumibilmente C/C++

  1. if (c & potenze_di_due[i]) cout << '1'; else cout << '0';
  2. cout << " ";


che senso ha?grazie in anticipo

Ultima modifica effettuata da ciao888 il 13/01/2011 alle 22:14
PM
Avatar
Xaratroom (Ex-Member)
Expert


Messaggi: 526
Iscritto: 03/04/2008

Up
1
Down
V
Segnala al moderatore
Postato alle 23:10
Giovedì, 13/01/2011
Il file viene stampato in "binario" ossia ogni carattere viene convertito in una serie di zeri e di uni.
Le righe:
for (int i = 7; i >= 0; i--)
if (c & potenze_di_due) cout << '1'; else cout << '0';
eseguono la conversione.

http://www.science.unitn.it/~fiorella/guidac/guidac008.html

PM
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Up
1
Down
V
Segnala al moderatore
Postato alle 3:35
Venerdì, 14/01/2011
Testo quotato

Postato originariamente da Xaratroom:

Il file viene stampato in "binario" ossia ogni carattere viene convertito in una serie di zeri e di uni.
Le righe:
Codice sorgente - presumibilmente C/C++

  1. for (int i = 7; i >= 0; i--)
  2. if (c & potenze_di_due[i]) cout << '1'; else cout << '0';




... e direi anche che è abbastanza orrendo come metodo...
Visto che il processore ragiona in binario già di suo, sfruttiamolo, invece di usare un array con le potenze di due:
Codice sorgente - presumibilmente C/C++

  1. if (c & (1 << i)) cout << '1';
  2. else cout << '0';



ma poi, come cacchio sono messe le parentesi!? Aperte al posto delle chiuse e viceversa?
Codice sorgente - presumibilmente C/C++

  1. int main()
  2. }
  3. ...
  4. while ()
  5. }
  6.  
  7. ...
  8.  
  9. {
  10.  
  11. ...
  12.  
  13. {



oh ma scherziamo?! :rotfl:

Ultima modifica effettuata da TheKaneB il 14/01/2011 alle 3:39
PM
Avatar
Xaratroom (Ex-Member)
Expert


Messaggi: 526
Iscritto: 03/04/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 8:15
Venerdì, 14/01/2011
Testo quotato

Postato originariamente da TheKaneB:
ma poi, come cacchio sono messe le parentesi!? Aperte al posto delle chiuse e viceversa?
Codice sorgente - presumibilmente C/C++

  1. int main()
  2. }
  3. ...
  4. while ()
  5. }
  6.  
  7. ...
  8.  
  9. {
  10.  
  11. ...
  12.  
  13. {



oh ma scherziamo?! :rotfl:


È sicuramente un errore di paste ... anche perché è la prima volta che vedo qualcuno fare questo errore.

PM