Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-07-2005, 16:34   #1
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 7359
Puntatori a bit

Salve ragazzi,
vi pongo una domanda: in C++ è possibile far puntare un puntatore, che generalmente punta al byte, ad un singolo bit che compone tale byte? Vi faccio un'esempio:

Supponiamo che in un byte ho memorizzato il codice 11010111 . Voglio cambiare il primo bit, quindi faccio una maschera del tipo 01111111 e poi faccio l'AND tra la maschera ed il codice. Ma è possibile dire al puntatore a quel byte, puntami al primo bit e scrivimi 0?
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 21-07-2005, 17:49   #2
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
no, non si può perché l'unità di indirizzamento è il byte, e questo non dipende dal linguaggio usato (C++ nel tuo caso), ma dalla macchina su cui lavori: nessun computer ti fa indirizzare singoli bit
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 21-07-2005, 19:38   #3
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 7359
Quote:
Originariamente inviato da 71104
no, non si può perché l'unità di indirizzamento è il byte, e questo non dipende dal linguaggio usato (C++ nel tuo caso), ma dalla macchina su cui lavori: nessun computer ti fa indirizzare singoli bit
Quindi l'unico modo è usare le maschere? Pero' in questo modo non operiamo realmente sul singolo bit. Chissà come mai non hanno implementato una cosa del genere.Forse perchè è impossibile.Ciao, grazie.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 21-07-2005, 20:32   #4
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16215
Quote:
Originariamente inviato da Unrue
Salve ragazzi,
vi pongo una domanda: in C++ è possibile far puntare un puntatore, che generalmente punta al byte, ad un singolo bit che compone tale byte?
No: i puntatori lavorano su oggetti che occupano un numero intero di byte.
Però puoi usare le maschere e gli operatori bit-a-bit.
Quote:
Supponiamo che in un byte ho memorizzato il codice 11010111 . Voglio cambiare il primo bit, quindi faccio una maschera del tipo 01111111
Casomai, del tipo "11111110": i bit si contano a partire dal meno significativo, cioè da quello più a destra.
Quote:
e poi faccio l'AND tra la maschera ed il codice.
Se vuoi cambiare il valore di un bit, cioè metterlo a 1 se è 0 e a 0 se è 1, devi fare non un AND ma uno XOR, e mettendo 1 in corrispondenza dei bit che vuoi cambiare, e 0 in corrispondenza degli altri.
Nel tuo caso:
Codice:
mybyte ^= 0x1;
Quote:
Ma è possibile dire al puntatore a quel byte, puntami al primo bit e scrivimi 0?
Al puntatore no, ma al bit scelto ovviamente sì: basta fare un AND con la maschera complementare.
Per esempio, se vuoi mettere a 0 il byte di indice 3 (gli indici partono da 0) e lasciare invariati gli altri, puoi fare:
Codice:
mybtyte &= ~(0x8);
Quote:
Pero' in questo modo non operiamo realmente sul singolo bit.
Perché no?
Il bit cambia, gli altri rimangono immutati: come fai a dire che non si è operato sul singolo bit?
Quote:
Chissà come mai non hanno implementato una cosa del genere.Forse perchè è impossibile.
Casomai, perché sarebbe scomodo.
Pensaci un attimo: se dovessi essere in grado di indirizzare ogni singolo bit della memoria anziché ogni singolo byte, ti ci vorrebbero dei puntatori otto volte più grandi, e potresti allocare 256 volte meno memoria.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu

Ultima modifica di Ziosilvio : 21-07-2005 alle 20:38.
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 21-07-2005, 20:52   #5
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 7359
Quote:
Originariamente inviato da Ziosilvio
Casomai, del tipo "11111110": i bit si contano a partire dal meno significativo, cioè da quello più a destra.
Hai ragione, intendevo dire il bit piu' significativo

Quote:
Originariamente inviato da Ziosilvio
Se vuoi cambiare il valore di un bit, cioè metterlo a 1 se è 0 e a 0 se è 1, devi fare non un AND ma uno XOR, e mettendo 1 in corrispondenza dei bit che vuoi cambiare, e 0 in corrispondenza degli altri.
Nel tuo caso:
Codice:
mybyte ^= 0x1;
Verissimo, ho fatto un po' di confusione

Quote:
Originariamente inviato da Ziosilvio
Perché no?
Il bit cambia, gli altri rimangono immutati: come fai a dire che non si è operato sul singolo bit?
Intendevo dire, che comunque l'operazione logica è fatta su tutti i bit, non solamente su quello che devo cambiare.In pratica, non esiste un'operatore che mi fa operare sul singolo bit.

Quote:
Originariamente inviato da Ziosilvio
Casomai, perché sarebbe scomodo.
Pensaci un attimo: se dovessi essere in grado di indirizzare ogni singolo bit della memoria anziché ogni singolo byte, ti ci vorrebbero dei puntatori otto volte più grandi, e potresti allocare 256 volte meno memoria.
Pero' in qualche caso potrebbe fare comodo, perchè comunque devo crearmi maschere di 8 bit per modificarne uno. Non so in termini computazionali quele sia meglio. Sicuramente le maschere, altrimenti non le facevano.

PS: Stai diventando il mio punto di riferimento in questo forum.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 22-07-2005, 00:18   #6
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Unrue
Intendevo dire, che comunque l'operazione logica è fatta su tutti i bit, non solamente su quello che devo cambiare.In pratica, non esiste un'operatore che mi fa operare sul singolo bit.
lascia perdere il linguaggio C++: nessuna macchina è in grado di lavorare su un solo bit alla volta; gli Intel ad es. devono per forza lavorare almeno su byte di 8 bit, ed è così anche per molte altre.
71104 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
Le vendite di EV sono esplose in tutto i...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:04.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v