Meglio fare un 3D per le varie discussioni sull'esercizio di LIbis dato che, non so voi, ma io mi sono trovato un pochino spiazzato!
:cry:
Inizio io con le domande:
Esiste un modo (ad esempio una libreria del C) per manipolare i bit singoli di una variabile??
PS Come influisce l'esercizio assegnato nella valutazione finale??? :?
Ciao a tutti
- Valefede
- Ingegneria Informatica - Triennale
- Sabato, 23 Ottobre 2004
- Subscribe via email
Comment
There are no comments made yet.
Accepted Answer
Pending Moderation
Ero assente quando è stato spiegato l'esercizio e sulla didattica non c'è niente: dove posso trovare il testo?
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 1
Accepted Answer
Pending Moderation
il testo è presente sul sito del prof di lab di info su http://www.unioroma2.it/didattica. il prof ha detto che considererà tutti gli esercizi alla fine e si farà un'idea se considerarli sufficienti oppure no.
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 2
Accepted Answer
Pending Moderation
Si è saputo se questo esame è una idoneità ?
Picella continua a dirmi che deve parlare con la Pazienza.....
Picella continua a dirmi che deve parlare con la Pazienza.....
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 3
Accepted Answer
Pending Moderation
Inizio io con le domande:
Esiste un modo (ad esempio una libreria del C) per manipolare i bit singoli di una variabile??
Ciao a tutti
Devi usare gli operatori che agiscono bit a bit (es: &, |, ^), e utilizzare delle "maschere", cioè mettere la var. in AND (o in OR) con dei numeri in binario (o preferibilmente in esadecimale).
Per maggiori informazioni consulta un qualsiasi manuale C++.
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 4
Accepted Answer
Pending Moderation
esempio: i è un int (32 bit);
voglio selezionare solo il primo bit di i; creo una maschera che contenga 31 bit a 0 e uno solo a 1; posso farlo facilmente usando una notazione esadecimale:
int maschera = 0x70000000;
7 in esadecimale è infatti 1000;
ora voglio mettere in j il primo bit di i;
int j = i & maschera;
voglio selezionare solo il primo bit di i; creo una maschera che contenga 31 bit a 0 e uno solo a 1; posso farlo facilmente usando una notazione esadecimale:
int maschera = 0x70000000;
7 in esadecimale è infatti 1000;
ora voglio mettere in j il primo bit di i;
int j = i & maschera;
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 5
Accepted Answer
Pending Moderation
invece di 7 intendevo 8
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 6
Accepted Answer
Pending Moderation
Grazie mille sei stato provvidenziale!!!
:wink:
:wink:
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 7
Accepted Answer
Pending Moderation
esempio: i è un int (32 bit);
voglio selezionare solo il primo bit di i; creo una maschera che contenga 31 bit a 0 e uno solo a 1; posso farlo facilmente usando una notazione esadecimale:
int maschera = 0x70000000;
7 in esadecimale è infatti 1000;
ora voglio mettere in j il primo bit di i;
int j = i & maschera;
OK funziona perfettamente con gli int, ma con i float e double da problemi in compilazione.
Qualcuno di voi è riuscito a selezionare i bit dei float e dei double? Se sì, come?
HELP PLEASE!!!
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 8
Accepted Answer
Pending Moderation
Qualcuno di voi è riuscito a selezionare i bit dei float e dei double? Se sì, come?
Selezionare i bit di int, float o double è la stessa cosa, visto che hanno lo stesso numero di bit.
Ovviamente, se pensi di selezionare bit di float e double ed usarli nello stesso modo dell'int, incappi in un errore logico. Infatti devi considerare che i float e double seguono lo standard IEEE 754, quello con esponente e mantissa, quindi per manipolare direttamente i bit sarebbe opportuno prima di tutto "trasformarli", riportandoli cioé ad una rappresentazione binaria simile all'int.
Ora, per fare ciò ci sono vari modi. Io ne conosco due:
1) utilizzando le maschere di bit e lavorando sui singoli bit, riprendendo in mano il libro di Architetture dei Calcolatori;
2) utilizzando gli shift (molto meno efficiente a giudizio del prof).
Anyway... errare umano est :wink:
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 9
Accepted Answer
Pending Moderation
Eeeehh!!! Float e double hanno lo stesso numero di bit?!?! :shock: Questa mi giunge nuova!
Selezionare i bit di int, float o double è la stessa cosa, visto che hanno lo stesso numero di bit.
Ovviamente, se pensi di selezionare bit di float e double ed usarli nello stesso modo dell'int, incappi in un errore logico. Infatti devi considerare che i float e double seguono lo standard IEEE 754, quello con esponente e mantissa, quindi per manipolare direttamente i bit sarebbe opportuno prima di tutto "trasformarli", riportandoli cioé ad una rappresentazione binaria simile all'int.
Ora, per fare ciò ci sono vari modi. Io ne conosco due:
1) utilizzando le maschere di bit e lavorando sui singoli bit, riprendendo in mano il libro di Architetture dei Calcolatori;
2) utilizzando gli shift (molto meno efficiente a giudizio del prof).
Quello che volevo fare io era appunto selezionare i bit dell'esponente e quelli della mantissa (conosco lo standard IEEE 754) attraverso l'uso delle maschere, ma gli operatori logici che agiscono sui bit non funzionano con i float e i double. C'è un modo per selezionarli senza l'operatore &?
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 10
Accepted Answer
Pending Moderation
Errare umano est... che t'avevo detto?
Non è vero che int, float e double hanno lo stesso numero di bit, ovvio: ho detto una baggianata!!
ops:
Intendevo invece che tu lavori soltanto su un dato numero di bit che sono quelli dei tipo che hai scelto per rappresentare i numeri a virgola fissa (int, long int). Ad ogni modo non avevo capito il tuo problema.
Non sapevo che l'operatore & non funzionasse su float e double: mi pare strano! :? Anche << (scorrimento) è un operatore a livello di bit, ma a me funziona benissimo su ogni tipo di dato!!
Anche float e double sono rappresentati da una sequenza di bit, quindi gli operatori a livello di bit dovrebbero funzionare!!
Forse ti sbagli con le maschere e la loro "lunghezza"!
Fammi sapere :wink:
Non è vero che int, float e double hanno lo stesso numero di bit, ovvio: ho detto una baggianata!!
Intendevo invece che tu lavori soltanto su un dato numero di bit che sono quelli dei tipo che hai scelto per rappresentare i numeri a virgola fissa (int, long int). Ad ogni modo non avevo capito il tuo problema.
Non sapevo che l'operatore & non funzionasse su float e double: mi pare strano! :? Anche << (scorrimento) è un operatore a livello di bit, ma a me funziona benissimo su ogni tipo di dato!!
Anche float e double sono rappresentati da una sequenza di bit, quindi gli operatori a livello di bit dovrebbero funzionare!!
Forse ti sbagli con le maschere e la loro "lunghezza"!
Fammi sapere :wink:
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 11
Accepted Answer
Pending Moderation
Anche float e double sono rappresentati da una sequenza di bit, quindi gli operatori a livello di bit dovrebbero funzionare!!
E' quello che credevo anch'io...
Invece non mi funziona neanche lo shift (<<
Tu fai lo shift e poi lo assegni a un intero o fai prima un cast?
P.S. Potrebbe essere che è un problema del mio compilatore? Però sarebbe strano: è uno dei + usati (Dev-C++ 4.9. 8)
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 12
Accepted Answer
Pending Moderation
...non mi funziona neanche lo shift (<<.
Tu fai lo shift e poi lo assegni a un intero o fai prima un cast?
Io ho fatto la cosa più inefficente: ho moltiplicato il numero in virgola mobile per un intero shiftato della precisione, applicando un arrotondamento, e poi ho fatto un cast ad un intero.
In effetti non ho shiftato direttamente il float (o double): davvero non funziona? :shock: ci proverò! :?
Io avrei problemi con l'overflow della moltiplicazione: in che modo posso aggiustare il mio numero a virgola fissa senza incappare in un overflow "a sinistra"? Il prof. parlava di moltiplicazioni incrociate tra parte intera e parte frazionaria, ma sinceramente non mi è ancora molto chiaro.
HELP
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 13
- Page :
- 1
There are no replies made for this post yet.
Be one of the first to reply to this post!
Be one of the first to reply to this post!
Please login to post a reply
You will need to be logged in to be able to post a reply. Login using the form on the right or register an account if you are new here. Register Here »