Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
NUC 15 Pro e NUC 15 Pro+ sono i due nuovi mini-PC di casa ASUS pensati per uffici e piccole medie imprese. Compatti, potenti e pieni di porte per la massima flessibilità, le due proposte rispondono in pieno alle esigenze attuali e future grazie a una CPU con grafica integrata, accompagnata da una NPU per la gestione di alcuni compiti AI in locale.
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Dal palco di Proofpoint Protect 2025 emerge la strategia per estendere la protezione dagli utenti agli agenti IA con il lancio di Satori Agents, nuove soluzioni di governance dei dati e partnership rafforzate che ridisegnano il panorama della cybersecurity
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-03-2008, 17:33   #1
ciccio er meglio
Senior Member
 
L'Avatar di ciccio er meglio
 
Iscritto dal: Sep 2001
Messaggi: 4834
shiftare a dx e sx

Ciao ragazzi ho un dubbio.

Ho letto che shiftare a sinistra di n bit significa moltiplicare per 2^n

In particolare che cosa significa?

Se, per esempio io ho questo byte: 10111010 e lo voglio shiftare a sx di 3 bit che succede?
__________________
Amareggiato per la chiusura di mezzo forum Off-topic. Riapritelooo!
ciccio er meglio è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 17:48   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2775
10111010 diventa 11010000
Ma io non direi che shiftare a sx "significa" moltiplicare per 2^n, diciamo che è un modo di vedere le cose, ma è molto più semplice pensare allo spostamento verso sx di tutti i bit
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 17:50   #3
ciccio er meglio
Senior Member
 
L'Avatar di ciccio er meglio
 
Iscritto dal: Sep 2001
Messaggi: 4834
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
10111010 diventa 11010000
Ma io non direi che shiftare a sx "significa" moltiplicare per 2^n, diciamo che è un modo di vedere le cose, ma è molto più semplice pensare allo spostamento verso sx di tutti i bit
capito. Grazie
__________________
Amareggiato per la chiusura di mezzo forum Off-topic. Riapritelooo!
ciccio er meglio è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 18:05   #4
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da ciccio er meglio Guarda i messaggi
Ciao ragazzi ho un dubbio.

Ho letto che shiftare a sinistra di n bit significa moltiplicare per 2^n

In particolare che cosa significa?

Se, per esempio io ho questo byte: 10111010 e lo voglio shiftare a sx di 3 bit che succede?
Codice:
int main(int argc, char **argv)
{
         unsigned int value = 4;  /*  4 = 0000 0100 */  
         unsigned int shift = 2;

         value <<= shift;           /* 16 = 0001 0000 */  
         value <<= shift;           /* 64 = 0100 0000 */  

         printf("%d\n", value);    /* stampa 64 */  
         return 0;
}
Capito?
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 18:06   #5
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
10111010 diventa 11010000
Ma io non direi che shiftare a sx "significa" moltiplicare per 2^n, diciamo che è un modo di vedere le cose, ma è molto più semplice pensare allo spostamento verso sx di tutti i bit
Non è un modo di vedere le cose, è proprio la risultante dell'operazione di shifting dei bit a sinistra.
Poi ci sono molte considerazioni da fare sullo shifting logico e aritmetico, il troncamento, ecc. ecc. L'argomento è molto complesso se uno deve analizzarlo in dettaglio. Non in tutti i casi infatti il bit perso viene sostituito con uno 0.
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 18:07   #6
ciccio er meglio
Senior Member
 
L'Avatar di ciccio er meglio
 
Iscritto dal: Sep 2001
Messaggi: 4834
Quote:
Originariamente inviato da mjordan Guarda i messaggi
Codice:
int main(int argc, char **argv)
{
         unsigned int value = 4;  /*  4 = 0000 0100 */  
         unsigned int shift = 2;

         value <<= shift;           /* 16 = 0001 0000 */  
         value <<= shift;           /* 64 = 0100 0000 */  

         printf("%d\n", value);    /* stampa 64 */  
         return 0;
}
Capito?

Veramente no...comunque qual è il senso di shiftare a destra o sinistra i bit?
__________________
Amareggiato per la chiusura di mezzo forum Off-topic. Riapritelooo!
ciccio er meglio è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 18:14   #7
ciccio er meglio
Senior Member
 
L'Avatar di ciccio er meglio
 
Iscritto dal: Sep 2001
Messaggi: 4834
Quote:
Originariamente inviato da mjordan Guarda i messaggi
Codice:
int main(int argc, char **argv)
{
         unsigned int value = 4;  /*  4 = 0000 0100 */  
         unsigned int shift = 2;

         value <<= shift;           /* 16 = 0001 0000 */  
         value <<= shift;           /* 64 = 0100 0000 */  

         printf("%d\n", value);    /* stampa 64 */  
         return 0;
}
Capito?
ah forse ho capito. Se shifto 0000 0100 di due posizioni a sx diventa 0001 0000

Ed è come se l'avessi moltiplicato per 2 ^2

Comunque il ragionamento della moltiplicazione ha senso e si capisce solo se si usa un esempio con un byte che ha un solo 1 (cioé l'esempio che hai fatto tu). Altrimenti non si capisce nulla..
__________________
Amareggiato per la chiusura di mezzo forum Off-topic. Riapritelooo!
ciccio er meglio è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 18:57   #8
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2775
Quote:
Originariamente inviato da mjordan Guarda i messaggi
Non è un modo di vedere le cose, è proprio la risultante dell'operazione di shifting dei bit a sinistra.
Non ho capito cosa intendi, o forse non mi sono fatto capire io nel mio intervento precedente. Intendevo dire che è molto più semplice vedere l'operazione di shift come uno spostamento dei bit che non come una moltiplicazione. Il fatto che il risultato sia lo stesso non implica che quello sia il suo "significato". Se invece intendi che al livello della macchina l'operazione eseguita è proprio quella della moltiplicazione, questo non lo sapevo ma mi sembra strano...
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 19:11   #9
ciccio er meglio
Senior Member
 
L'Avatar di ciccio er meglio
 
Iscritto dal: Sep 2001
Messaggi: 4834
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Non ho capito cosa intendi, o forse non mi sono fatto capire io nel mio intervento precedente. Intendevo dire che è molto più semplice vedere l'operazione di shift come uno spostamento dei bit che non come una moltiplicazione. Il fatto che il risultato sia lo stesso non implica che quello sia il suo "significato". Se invece intendi che al livello della macchina l'operazione eseguita è proprio quella della moltiplicazione, questo non lo sapevo ma mi sembra strano...
Che io sappia le cpu non eseguono calcoli cosi complessi. Cioè la moltiplicazione la fanno ma emulata. Per esempio per fare 4x3 sommano 3 volte 4.

Comunque qual è il senso di shiftare a destra o sinistra i bit?

Da quello che ho capito non è che si fa una vera moltiplicazione o divisione con lo shift..
__________________
Amareggiato per la chiusura di mezzo forum Off-topic. Riapritelooo!
ciccio er meglio è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 19:25   #10
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da ciccio er meglio Guarda i messaggi
Che io sappia le cpu non eseguono calcoli cosi complessi. Cioè la moltiplicazione la fanno ma emulata. Per esempio per fare 4x3 sommano 3 volte 4.
Nono, le cpu che abbiamo oggi eseguono la moltiplicazione proprio, ed eseguono algoritmi ben piu' complessi.
Esternamente gli si da il comando di moltiplicare 2 valori.
E lei esegue il tutto, senza scomporre l'operazione in altre operazioni come forse hai capito tu.

Elettricamente ci sono vari stadi della ALU della CPU che eseguono una moltiplicazione, e l'algoritmo logico che esegue e' quello della moltiplicazione che abbiamo imparato a fare alle elementari, solo fatto in base 2 invece che in base 10.

Quote:
Comunque qual è il senso di shiftare a destra o sinistra i bit?

Da quello che ho capito non è che si fa una vera moltiplicazione o divisione con lo shift..
be' e' una vera divisione o moltiplicazione, ma un po' particolare in quanto serve per moltiplicare o dividere solo per 2 o potenze.

Shiftare a destra di 1 bit significa dividere per 2.
Shiftare a sinistra di 1 bit significa moltiplicare per 2.
Al che se shifto di 2 bit a sinistra moltiplichero' 2 volte per 2, ovvero per 4
Se shifto di 3 bit a sinistra, allora moltiplichero' 3 volte per 2, ovvero per 8

Oggi e' quasi sempre piu' conveniente dividere per 3 direttamente, invece che farlo con gli shift a destra e le sottrazioni.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 20:00   #11
ciccio er meglio
Senior Member
 
L'Avatar di ciccio er meglio
 
Iscritto dal: Sep 2001
Messaggi: 4834
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Nono, le cpu che abbiamo oggi eseguono la moltiplicazione proprio, ed eseguono algoritmi ben piu' complessi.
Esternamente gli si da il comando di moltiplicare 2 valori.
E lei esegue il tutto, senza scomporre l'operazione in altre operazioni come forse hai capito tu.

Elettricamente ci sono vari stadi della ALU della CPU che eseguono una moltiplicazione, e l'algoritmo logico che esegue e' quello della moltiplicazione che abbiamo imparato a fare alle elementari, solo fatto in base 2 invece che in base 10.


be' e' una vera divisione o moltiplicazione, ma un po' particolare in quanto serve per moltiplicare o dividere solo per 2 o potenze.

Shiftare a destra di 1 bit significa dividere per 2.
Shiftare a sinistra di 1 bit significa moltiplicare per 2.
Al che se shifto di 2 bit a sinistra moltiplichero' 2 volte per 2, ovvero per 4
Se shifto di 3 bit a sinistra, allora moltiplichero' 3 volte per 2, ovvero per 8

Oggi e' quasi sempre piu' conveniente dividere per 3 direttamente, invece che farlo con gli shift a destra e le sottrazioni.
quindi nel mio caso shiftando 10111010 di 3 posizioni a sinistra è come se lo moltiplicassi per 2^3 cioè per 8. Ma come faccio a verificare questa regola?

praticamente dovrei ottenere 11010 000. Come faccio ad ottenere ciò?

devo moltiplicare 10111010 per 00001000???
__________________
Amareggiato per la chiusura di mezzo forum Off-topic. Riapritelooo!
ciccio er meglio è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 20:06   #12
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da ciccio er meglio Guarda i messaggi
quindi nel mio caso shiftando 10111010 di 3 posizioni a sinistra è come se lo moltiplicassi per 2^3 cioè per 8. Ma come faccio a verificare questa regola?

praticamente dovrei ottenere 11010 000. Come faccio ad ottenere ciò?

devo moltiplicare 10111010 per 00001000???

Beh, ti sei gia' mangiato qualcosa shiftando, fallo con numeri piu' piccoli, oppure prevedi un po' di spazio per i bit a 1 che escono a sinistra.

tipo
0000 0000 1011 1010
Shiftato a sinistra di 3, che equivale a moltiplicare per 8, ottieni
0000 0101 1101 0000

Se si come trasformare da base 2 a base 10 puoi fare la prova.
Altrimenti ti fidi... (PS: Se sei proprio nella c...a, puoi sempre provare ad usare la calcolatrice scientifica di windows)
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 20:14   #13
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da ciccio er meglio Guarda i messaggi
Ciao ragazzi ho un dubbio.

Ho letto che shiftare a sinistra di n bit significa moltiplicare per 2^n

In particolare che cosa significa?

Se, per esempio io ho questo byte: 10111010 e lo voglio shiftare a sx di 3 bit che succede?
In QUESTO caso ottieni lo stesso risultato della moltiplicazione per 8.

Comunque le operazioni di shifting sono "particolari": molti linguaggi non specificano in maniera precisa cosa succede, e "demandano" tutto al compilatore e/o all'architettura su cui sta girando l'applicazione.
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Oggi e' quasi sempre piu' conveniente dividere per 3 direttamente, invece che farlo con gli shift a destra e le sottrazioni.
No no: la divisione rimane ancora la "bestia nera" dei calcolatori, e richiede parecchi cicli di clock per poter essere portata a termine (rispetto a somma, sottrazione, shift, ma anche alla stessa moltiplicazione).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 20:27   #14
ciccio er meglio
Senior Member
 
L'Avatar di ciccio er meglio
 
Iscritto dal: Sep 2001
Messaggi: 4834
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Se sai come trasformare da base 2 a base 10 puoi fare la prova.
Altrimenti ti fidi... (PS: Se sei proprio nella c...a, puoi sempre provare ad usare la calcolatrice scientifica di windows)
Ok ci provo:

10111010 x 00001000 <=> 186 x 8

186*8=1488 che in binario fa 10111010000

Eliminando i primi 3 bit ottengo 11010000!

Ok credo di aver capito


PS. Percaso anche voi state studiando calcolatori?
__________________
Amareggiato per la chiusura di mezzo forum Off-topic. Riapritelooo!

Ultima modifica di ciccio er meglio : 28-03-2008 alle 20:29.
ciccio er meglio è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 20:32   #15
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da ciccio er meglio Guarda i messaggi
Ok ci provo:

10111010 x 00001000 <=> 186 x 8

186*8=1488 che in binario fa 10111010000

Eliminando i primi 3 bit ottengo 11010000!

Ok credo di aver capito


PS. Percaso anche voi state studiando calcolatori?
Ok.
No comunque calcolatori l'ho gia' dato.
12 anni fa piu' o meno



Quote:
Originariamente inviato da cdimauro Guarda i messaggi
No no: la divisione rimane ancora la "bestia nera" dei calcolatori, e richiede parecchi cicli di clock per poter essere portata a termine (rispetto a somma, sottrazione, shift, ma anche alla stessa moltiplicazione).
Mmmh.
Forse dividere per 3 resta piu' vantaggioso con shift e sottrazioni.
Ma quando i bit ad uno sono piu' di 2 secondo me non conviene o siamo al pelo.

Quote:
On Core 2 CPUs, division operations process two bits per clock cycle. The new divider circuit implemented on Penryn is able to process four bits per clock cycle, meaning it is two times faster on division operations that Core 2 CPUs.
La divisione a 32bit sulle CPU nuove ci impiega quindi 8 cicli!!! E a naso stalla meno registri di usare solo shift e sottrazioni.
Sono anni che comunque non "lavoro" piu' con l'ASM cosi' a basso livello, quindi potrei sbagliare.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 20:39   #16
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
In effetti soli 8 cicli di clock è un notevole risultato per la divisione. Ottima architettura quella di Penryn.

Comunque per valori piccoli o con pochi "bit a 1", come dicevi, non è conveniente.

x ciccio: anch'io ho dato l'esame di architetture degli elaboratori una dozzina d'anni fa.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 21:17   #17
ciccio er meglio
Senior Member
 
L'Avatar di ciccio er meglio
 
Iscritto dal: Sep 2001
Messaggi: 4834
Vedo con piacere che ancora ricordate queste cose. Bene bene, vuol dire che a qualche cosa vi sono servite

Grazie per l'aiuto
__________________
Amareggiato per la chiusura di mezzo forum Off-topic. Riapritelooo!
ciccio er meglio è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondo...
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint Cybersecurity: email, utenti e agenti IA, la nuo...
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
HONOR inaugura il primo ALPHA Flagship S...
Yamaha: ecco il brevetto del 'finto moto...
'Console obsoleta e utenti ingannati': u...
Stop al ransomware su Google Drive, graz...
L'IA è la nuova interfaccia utent...
Battlefield 6: confermata la dimensione ...
Windows 11 porta il Wi-Fi 7 alle aziende...
Logitech MX Master 4 subito disponibile ...
'Nonna Skyrim' dice addio all'RPG di Bet...
PlayStation 5 Slim a 399€ o bundle con N...
roborock Qrevo Curv S5X in offerta a 649...
Sapphire Nitro+ B850A WIFI 7: la nuova s...
CraftGPT: un giocatore costruisce ChatGP...
Il Conto Termico 3.0 è ufficiale:...
Tesla inaugura la stazione di ricarica S...
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: 15:22.


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