ZfreS ha scritto:In decimale è $22$. Ma perchè il mio codice non funziona?
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.
uint32_t ruota_byte(uint32_t x, uint32_t n)
{
x &= 0xFF;
n &= 7;
return ( (x << n) | (x >> (-n&7)) ) & 0xFF;
}
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
00001101
Circular shift << 3
00011010
00110100
01101000
unsigned signed
hex 68 68
dec 104 104
oct 150 150
bin 1101000 1101000
ZfreS ha scritto:Ma se volessi farlo su un byte, cosa dovrei fare?
Visitano il forum: Nessuno e 1 ospite