Re: [C, C++] Difficoltà a capire gli operatori bitwise

Messaggioda ZfreS » 01/11/2019, 10:26

In decimale è $22$. Ma perchè il mio codice non funziona?
[URL=https://datesnow.life]Authentic Ladies[/URL]
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 1910 di 4590
Iscritto il: 22/10/2016, 17:52
Località: Usa

Re: [C, C++] Difficoltà a capire gli operatori bitwise

Messaggioda Obidream » 01/11/2019, 10:29

ZfreS ha scritto:In decimale è $22$. Ma perchè il mio codice non funziona?

Funziona, è che non sai perché e questo è un problema, il messaggio che ho quotato prima dell'edit era corretto, non so perché tu lo abbia cambiato.
((v & 0xff) && (v & 0xff00) && (v & 0xff0000) && (v & 0xff000000))
Avatar utente
Obidream
Advanced Member
Advanced Member
 
Messaggio: 1075 di 2195
Iscritto il: 07/02/2012, 20:57

Re: [C, C++] Difficoltà a capire gli operatori bitwise

Messaggioda ZfreS » 01/11/2019, 10:34

Perchè prima avevo scritto, togliendo gli zeri prima: $11010000$ che è 208, mentre il 22 è $00010110$ , ma non funziona il codice, perchè invece di darmi $22$ mi da $208$. Come ho detto prima è come se facesse un semplice left shift.
[URL=https://datesnow.life]Authentic Ladies[/URL]
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 1911 di 4590
Iscritto il: 22/10/2016, 17:52
Località: Usa

Re: [C, C++] Difficoltà a capire gli operatori bitwise

Messaggioda vict85 » 01/11/2019, 11:26

ZfreS ha scritto:Perchè prima avevo scritto, togliendo gli zeri prima: $11010000$ che è 208, mentre il 22 è $00010110$ , ma non funziona il codice, perchè invece di darmi $22$ mi da $208$. Come ho detto prima è come se facesse un semplice left shift.


Perché il circular shift è fatto su un intero da 32 bit e non sul singolo byte. Considera \((1\ll 28)\) e chiama la tua funzione con 7 e vedi che succede.

Tieni inoltre conto che stai lavorando con interi con segno.
vict85
Moderatore
Moderatore
 
Messaggio: 9939 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C, C++] Difficoltà a capire gli operatori bitwise

Messaggioda ZfreS » 01/11/2019, 11:51

Ora ho capito. In pratica il risultato è giusto perchè l'oprazione viene fatta sui 4 byte e non su uno. Ma se volessi "ignorare" gli altri 24 byte, come dovrei modificare il codice? Facendo riferimento al sito https://onlinetoolz.net/bitshift provando con il numero 13 e shift 3 viene 11, mentre con il mio codice viene(correttamente) 104
[URL=https://datesnow.life]Authentic Ladies[/URL]
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 1913 di 4590
Iscritto il: 22/10/2016, 17:52
Località: Usa

Re: [C, C++] Difficoltà a capire gli operatori bitwise

Messaggioda vict85 » 01/11/2019, 13:27

Dando una occhiata in giro ho trovato questo https://blog.regehr.org/archives/1063 che fornisce informazione su questo tipo di operazione. Riguardo alla versione con i byte. Direi che dovresti fare qualcosa come:

Codice:
uint32_t ruota_byte(uint32_t x, uint32_t n)
{
   x &= 0xFF;
   n &= 7;
   return ( (x << n) | (x >> (-n&7)) ) & 0xFF;
}
vict85
Moderatore
Moderatore
 
Messaggio: 9940 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C, C++] Difficoltà a capire gli operatori bitwise

Messaggioda Obidream » 01/11/2019, 13:58

ZfreS ha scritto:Facendo riferimento al sito https://onlinetoolz.net/bitshift provando con il numero 13 e shift 3 viene 11, mentre con il mio codice viene(correttamente) 104

Dal sito webbe:


00001101
Circular shift << 3
00011010
00110100
01101000
unsigned signed
hex 68 68
dec 104 104
oct 150 150
bin 1101000 1101000
((v & 0xff) && (v & 0xff00) && (v & 0xff0000) && (v & 0xff000000))
Avatar utente
Obidream
Advanced Member
Advanced Member
 
Messaggio: 1076 di 2195
Iscritto il: 07/02/2012, 20:57

Re: [C, C++] Difficoltà a capire gli operatori bitwise

Messaggioda ZfreS » 01/11/2019, 14:58

Si, è così.
[URL=https://datesnow.life]Authentic Ladies[/URL]
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 1914 di 4590
Iscritto il: 22/10/2016, 17:52
Località: Usa

Re: [C, C++] Difficoltà a capire gli operatori bitwise

Messaggioda ZfreS » 02/11/2019, 11:09

Ma se volessi farlo su un byte, cosa dovrei fare?
[URL=https://datesnow.life]Authentic Ladies[/URL]
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 1917 di 4590
Iscritto il: 22/10/2016, 17:52
Località: Usa

Re: [C, C++] Difficoltà a capire gli operatori bitwise

Messaggioda vict85 » 02/11/2019, 11:41

ZfreS ha scritto:Ma se volessi farlo su un byte, cosa dovrei fare?


Guarda qualche messaggio fa, te l'ho già scritto.
vict85
Moderatore
Moderatore
 
Messaggio: 9946 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

PrecedenteProssimo

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite