programma su shift circolare

Programmazione, algoritmica, teoria dell'informazione, ...
Rispondi
piazza88
Messaggi: 130
Iscritto il: 26 set 2006, 16:53

programma su shift circolare

Messaggio da piazza88 »

qualche suggerimento per scrivere in c++ una funzione che, presi due interi a,n, realizzi uno shift a sinistra di n posizioni dei bit dell'intero a, facendo in modo che i bit più significativi vengano reintrodotti nella parte meno significativa (e.g. 2 bit su 1010001 diventa 1000110)?
Avatar utente
SkZ
Messaggi: 3333
Iscritto il: 03 ago 2006, 21:02
Località: Concepcion, Chile
Contatta:

Messaggio da SkZ »

per long

Codice: Seleziona tutto

m=sizeof(long)*8-n
x=a<<n
y=(a-x>>n)>>m
return x+y
non sono sicurissimo che funzioni
impara il [tex]~\LaTeX[/tex] e mettilo da par[tex]\TeX~[/tex]

Software is like sex: it's better when it's free (Linus T.)
membro: Club Nostalgici
Non essere egoista, dona anche tu! http://fpv.hacknight.org/a8.php
piazza88
Messaggi: 130
Iscritto il: 26 set 2006, 16:53

Messaggio da piazza88 »

provando con il tuo codice a me non fungeva; io alla fine l'ho risolto copiando il numero in un array e permutando l'array; il mio unico problema è che, essendo l'output della funzione un int, questo int non potrà iniziare per zero, ma credo sia implicito nell'indicazione dell'esercizio, che chiede di scrivere un prototipo del tipo:
int circular_shift (int a,int n){...}.
fph
Site Admin
Messaggi: 3958
Iscritto il: 01 gen 1970, 01:00
Località: in giro
Contatta:

Messaggio da fph »

Mi sa che tu e skz non vi siete intesi bene su questo: per "rappresentazione in base 2 di un intero n" si intende quella che comincia con un 1 e contiene circa log_2(n) cifre o quella che è lunga 8*sizeof(int) bits? Cioè: la rappresentazione in base 2 di "5" è 101 oppure 00000000 00000101?
--federico
[tex]\frac1{\sqrt2}\bigl(\left|\text{loves me}\right\rangle+\left|\text{loves me not}\right\rangle\bigr)[/tex]
piazza88
Messaggi: 130
Iscritto il: 26 set 2006, 16:53

Messaggio da piazza88 »

sarebbe bello fare uno shift con risultati che inizino anche per zero, però l'esercizio che avevo sotto mano dava come prototipo da seguire una cosa del tipo
"int funzione(int a,int n)" quindi avendo come output un int credo non fosse necessario poter shiftare, e.g di 2, numeri del tipo 100100 -> 010010, cioè con risultato che inizia per zero; in quel caso bisognerebbe dare come output un array, credo
Rispondi