Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-06-2010, 13:53   #1
virusso80
Member
 
L'Avatar di virusso80
 
Iscritto dal: Oct 2005
Città: Milano
Messaggi: 153
[C] type cast

Ciao a tutti,
ho necessità di considerare dei campi di un record (che possono essere interi, stringhe, char, strutture complesse) nel loro formato binario (non mi interessa visualizzarlo) originario:
es. char s[] = "ciao"
mi serve "considerarlo" come se fosse un binario per effettuare su di lui operazioni di modulo (%) sui bit per poi ottenere un unsigned come risultato

se facessi così:
unsigned u = (unsigned) s;
unsigned res = s % u;

In questi casi, effettuare un semplice cast a unsigned non va bene...giusto? io infatti vorrei che ogni volta che ho quella stringa (o in generale quel dato) ottengo sempre lo stesso risultato da questa operazione di %, e così non è.

Credo mi sto perdendo qualcosa

come posso fare? mi date una dritta! grazie e scusate anticipatamente per la domanda stupida!
virusso80 è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2010, 20:24   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Non va bene quel cast, perché fai il cast del puntatore al primo elemento della stringa ad unsigned int.
Devi usare il puntatore:

unsigned int x = *(unsgned int *)s;

Devi fare una hash map ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2010, 21:01   #3
virusso80
Member
 
L'Avatar di virusso80
 
Iscritto dal: Oct 2005
Città: Milano
Messaggi: 153
Quote:
Originariamente inviato da cionci Guarda i messaggi
Non va bene quel cast, perché fai il cast del puntatore al primo elemento della stringa ad unsigned int.
Devi usare il puntatore:

unsigned int x = *(unsgned int *)s;

Devi fare una hash map ?
allora provo a spiegarmi bene. Devo implementare l'operazione di modulo bit a bit, nel senso che data una sequenza di bit...arbitrariamente lunga, devo effettuare il modulo rispetto a un intero (eventualmente unsigned)

nel post precedente il mio scopo era quello di convertire tutto a unsigned int e poi usare il % built-in...ma non va!

Credo che bisogna cambiare completamente approccio e ragionare "bitwise". è solo che non mi è ben chiaro come procedere. Volevo giusto qualche dritta

Grazie anticipatamente

Ultima modifica di virusso80 : 27-06-2010 alle 22:24.
virusso80 è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2010, 22:59   #4
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
che cos'é l'operazione di modulo bit a bit...?
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2010, 23:03   #5
virusso80
Member
 
L'Avatar di virusso80
 
Iscritto dal: Oct 2005
Città: Milano
Messaggi: 153
Quote:
Originariamente inviato da fero86 Guarda i messaggi
che cos'é l'operazione di modulo bit a bit...?
semplicmeente l'operazione che si fa con %
es. 6 % 3 = 0, 5 % 2 = 1 etc, praticamente la funzione che calcola il resto della divisione fra due numeri, la dovrei fare considerando il numero (byte) relativo a quella sequenza di bit.

es: char s [] = "ciao" in binario supponiamo si rappresenti con 10010101101...1010

io voglio claoclare il modulo del relativo numero rispetto a un parametro che ho io es 3

quindi voglio fare 10010101101...1010 % 101

non so se mi sono spiegato.

Non riesco a capire come ragionare per prendere la versione binaria del parametro (ovviamnte la considererei a gruppi di byte)
virusso80 è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2010, 23:05   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Deve andare... A parità di stringa e di divisore ti deve sempre ritornare lo stesso modulo.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2010, 23:06   #7
virusso80
Member
 
L'Avatar di virusso80
 
Iscritto dal: Oct 2005
Città: Milano
Messaggi: 153
Quote:
Originariamente inviato da cionci Guarda i messaggi
Deve andare... A parità di stringa e di divisore ti deve sempre ritornare lo stesso modulo.
esatto!!!

come faccio eprò a considerare la versione binaria?
virusso80 è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2010, 23:12   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da virusso80 Guarda i messaggi
come faccio eprò a considerare la versione binaria?
Che vuoi dire ? Quella binaria è solo una rappresentazione del numero, se vuoi la puoi fare anche in ottale, ma il risultato sarà sempre lo stesso.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2010, 23:35   #9
virusso80
Member
 
L'Avatar di virusso80
 
Iscritto dal: Oct 2005
Città: Milano
Messaggi: 153
Quote:
Originariamente inviato da cionci Guarda i messaggi
Che vuoi dire ? Quella binaria è solo una rappresentazione del numero, se vuoi la puoi fare anche in ottale, ma il risultato sarà sempre lo stesso.
si ok, mi è chiaro questo. Il mio problema, è come faccio a realizzare l'operazione di modulo tra due campi di tipo diverso (eventualmente anche stringhe con timeval). L'unica cosa in comune è al rappresentazione binaria, che "in fondo" rappresenta un numero e in quanto tale può essere trattato così.

Come faccio eprò a ragionare sui bit della stringa o della struttura complessa?

in poche parole, faccio delle azioni in base al risultato del mod su una generica coppia di campi, che non avendo nulla in comune, credo possono essere presi nella loro rappresentazione base. Per questo avevo l'idea di concentrarmi sulla loro rappresentazione binaria. Ma non riesco a capire bene

Ultima modifica di virusso80 : 27-06-2010 alle 23:39.
virusso80 è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2010, 08:49   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Il valore rappresentato dalla rappresentazione binaria è uguale a quello rappresentato dalla rappresentazione decimale, quindi il risultato della divisione è lo stesso.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2010, 09:18   #11
virusso80
Member
 
L'Avatar di virusso80
 
Iscritto dal: Oct 2005
Città: Milano
Messaggi: 153
Quote:
Originariamente inviato da cionci Guarda i messaggi
Il valore rappresentato dalla rappresentazione binaria è uguale a quello rappresentato dalla rappresentazione decimale, quindi il risultato della divisione è lo stesso.
grazie per la risposta. mi è perfettamente chiaro. ma data un generico dato dd, come faccio a fare
dd % 3?

per questo il problema del cast...originario.
virusso80 è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2010, 12:59   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Dipende su quanti byte di dd vuoi fare tale operazione... dd è 1, 2, 4, 8 byte ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2010, 13:23   #13
virusso80
Member
 
L'Avatar di virusso80
 
Iscritto dal: Oct 2005
Città: Milano
Messaggi: 153
Quote:
Originariamente inviato da cionci Guarda i messaggi
Dipende su quanti byte di dd vuoi fare tale operazione... dd è 1, 2, 4, 8 byte ?
diciamo che la lunghezza in byte è nota, cioè è un parametro della funzione. il divisore è sempre 1 byte
virusso80 è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2010, 13:46   #14
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da virusso80 Guarda i messaggi
semplicmeente l'operazione che si fa con %
es. 6 % 3 = 0, 5 % 2 = 1 etc, praticamente la funzione che calcola il resto della divisione fra due numeri, la dovrei fare considerando il numero (byte) relativo a quella sequenza di bit.
non ho capito perché la chiami "bit a bit": le operazioni bitwise sono un'altra cosa, sono diverse dalle operazioni logiche.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2010, 13:54   #15
virusso80
Member
 
L'Avatar di virusso80
 
Iscritto dal: Oct 2005
Città: Milano
Messaggi: 153
Quote:
Originariamente inviato da fero86 Guarda i messaggi
non ho capito perché la chiami "bit a bit": le operazioni bitwise sono un'altra cosa, sono diverse dalle operazioni logiche.
ok forse ho usato una espressione impropria. Intendevo che credo bisogni considerare le operazioni bit a bit (come shift & e |) per realizzare l'operazione di mod.

Mi scuso per il cattivo uso dell'espressione.

Credo cmq che il problema sia chiaro.

mi ripeto cercando di essere maggiormente chiaro:
devo cercare di realizzare un metodo
unsigned calcolaMod (void* input, unsigned len, unsigned divisore) e ritorni il resto dell'operazione. In questo caso input è un puntatore a void, in modo da applicare questo metodo a qualsiasi tipo di dato.

spero di essere stato utile...

il mio problema è che devo riuscire a considerare la rappresentazione binaria (o altro formato numerico) del dato, perchè mi serve il resto nella divisione, e questo deve essere indipendente dal tipo di dato, nel senso che deve funzioanre sia che gli passo interi sia che gli passo stringhe.


Unico modo che mi viene in mente è quello che farei anche manualemnte e cioè faccio divisione (eventualmente modulo 2 per non tenere conto dei riporti ed è più veloce da implementare) e poi mi devo abbassare la cifra di volta in volta...

quindi es.
char * s = "re" supponiamo che sia rappresentato in binario come 10100011 11001100 (ovvero 2 byte)
divisore = 11001011 (già in binario)

mi trovo a fare la prima volta 10100011 XOR 11001011 = 01101000

quindi devo "abbassare" il primo 1 del secondo byte

ma per fare questo devo
- shiftare a sinistra il resto parziale (così tolgo la cifra 0 iniziale) e quindi
- fare OR con il secondo byte (in cui l'unica cifra che mi interessa è stata shiftata nella posizione meno significativa)
- ripetere di nuovo per tutti i bit rimanenti del secondo byte

nn so se è chiaro come approccio. Mi chiedevo se ci fosse un modo rapido o se è sbagliato questo modo di procedere

Grazie anticipatamente

Ultima modifica di virusso80 : 28-06-2010 alle 14:04.
virusso80 è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2010, 14:50   #16
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quindi una lunghezza generica ? In tal caso è semplice
Come fai una divisione su carta ? Allo stesso modo puoi fare una divisione byte a byte ed ovviamente ottenere il resto finale. Invece di usare le cifre decimali, selezioni come cifra un byte. Nel caso ci sia resto dal passo precedente lo metti nel secondo byte meno significativo dell'intero e fai l'operazione in questo modo.

Ultima modifica di cionci : 28-06-2010 alle 14:54.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2010, 15:29   #17
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Un esempio semplice:

AA CC DE 1A / FF

AA / FF = 00 resto AA
AA CC / FF = AB resto 77
77 DE / FF = 78 resto 56
56 1A / FF = 56 resto 70
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2010, 16:03   #18
virusso80
Member
 
L'Avatar di virusso80
 
Iscritto dal: Oct 2005
Città: Milano
Messaggi: 153
Quote:
Originariamente inviato da cionci Guarda i messaggi
Quindi una lunghezza generica ? In tal caso è semplice
Come fai una divisione su carta ? Allo stesso modo puoi fare una divisione byte a byte ed ovviamente ottenere il resto finale. Invece di usare le cifre decimali, selezioni come cifra un byte. Nel caso ci sia resto dal passo precedente lo metti nel secondo byte meno significativo dell'intero e fai l'operazione in questo modo.
grazie per la risposta. Ci sono, ma se le cifre significative del divisore sono inferiori alla lunghezza del byte (es il divisore è 5 cioè 101) come ragiono...? non posso ragionare byte a byte

es.
10100011 11001100 / 101
101?????
--------
000?????

per "abbassare" le cifre successive diventa davvero macchinoso visto che vanno "abbassate" una alla volta...ma credo non ci sia un modo più rapido vero? non c'è un modo per far fare il più possibile a C piuttosto che implementare tutto?

Grazie mille per la disponibilità e la gentilezza

Ultima modifica di virusso80 : 28-06-2010 alle 16:14.
virusso80 è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2010, 18:27   #19
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da virusso80 Guarda i messaggi
non posso ragionare byte a byte
Certo e funziona allo stesso modo...
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Toyota usa giochi e premi per spingere i...
HarmonyOS ha raggiunto la soglia di sopr...
Le offerte Amazon più convenienti...
Un gruppo di ladri ha usato Google Maps ...
Apple non si fida di Samsung per la real...
Windows 11: un nuovo driver nativo mette...
Vi hanno regalato buoni Amazon? Intanto ...
Via acari, polvere e sporco da materassi...
Cuffie Beats in super offerta su Amazon,...
Xbox Cloud Gaming arriva su Amazon Fire ...
Un blackout a San Francisco manda in til...
Windows 11 è diventato più...
Apple cambia strategia a causa della cri...
007 First Light: uscita rimandata di due...
Samsung Galaxy A37 e A57: il comparto fo...
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: 23:47.


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