Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Con un prezzo di 2.999 euro, il Panasonic Z95BEG entra nella fascia ultra-premium dei TV OLED: pannello Primary RGB Tandem, sistema di raffreddamento ThermalFlow, audio Technics integrato e funzioni gaming avanzate lo pongono come un punto di riferimento
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
Abbiamo provato per diverse settimane il nuovo Magic V5 di HONOR, uno smartphone pieghevole che ci ha davvero stupito. Il device è il più sottile (solo 4.1mm) ma non gli manca praticamente nulla. Potenza garantita dallo Snapdragon 8 Elite, fotocamere di ottima qualità e batteria in silicio-carbonio che garantisce un'ottima autonomia. E il Prezzo? Vi diciamo tutto nella nostra recensione completa.
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: 6000
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: 6000
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: 16211
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: 6000
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


Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro) Recensione Google Pixel 10 Pro XL: uno zoom 100x...
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico Lenovo IdeaPad Slim 3: un notebook Snapdragon X ...
Robot aspirapolvere Roborock Q7 M5 a pre...
Offerte sui TV LG su Amazon: OLED evo e ...
Il Galaxy Z Fold 7 è un successo:...
Amazon abbatte i prezzi hardware: come p...
Eureka J15 Ultra imbarazza la concorrenz...
ChatGPT: il piano Free diventa più...
Il prossimo top di gamma di Vivo sarà il...
Sony mostra in anteprima la propria tecn...
Dreame A3 AWD: a IFA 2025 debutta il rob...
OpenAI, il chip proprietario per l'AI &e...
OnePlus e Hasselblad si separano: una nu...
Ayaneo Pocket Air Mini: la retro console...
Amazon sfida tutti: crollano iPhone e Ma...
MacBook Pro con chip M4 a 1.649€ e MacBo...
Dreame a IFA 2025: robot capaci di salir...
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: 09:44.


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