Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Realizzato da Lenovo e installato presso il Cineca di Casalecchio di Reno, Pitagora offre circa 44 PFlop/s di potenza di calcolo ed è dedicato alla simulazione della fisica del plasma e allo studio dei materiali avanzati per la fusione, integrandosi nell’ecosistema del Tecnopolo di Bologna come infrastruttura strategica finanziata da EUROfusion e gestita in collaborazione con ENEA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Rullo di lavaggio dei pavimenti abbinato a un potente motore da 28.000 Pa e a bracci esterni che si estendono: queste, e molte altre, le caratteristiche tecniche di Z60 Ultra Roller Complete, l'ultimo robot di Mova che pulisce secondo le nostre preferenze oppure lasciando far tutto alla ricca logica di intelligenza artificiale integrata
Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
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


Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare Cineca inaugura Pitagora, il supercomputer Lenov...
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA Mova Z60 Ultra Roller Complete: pulisce bene gra...
Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
TV Hisense e TCL da 43'' (ma non solo): ...
Collins, "vibe coding" è...
Record di copie vendute per Red Dead Red...
Halo Infinite: in arrivo l'ultimo grande...
TV LG OLED 2025: Amazon fa sconti al che...
Forse, finalmente, ci siamo? Alcuni rumo...
Smart home più facile ed economic...
Motorola edge 50 neo in svendita, 202€: ...
Cina e Paesi Bassi verso la distensione ...
'Senza TSMC non ci sarebbe NVIDIA': Jens...
Fumo di sigaretta e sporco per 17 anni: ...
Resi Amazon Natale 2025: cambiano i temp...
L'SSD modulare aggiornabile come un PC: ...
Intel ha denunciato un ex dipendente per...
Blue Origin rinvia il secondo lancio del...
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:55.


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