Pagina 1 di 1

programma su shift circolare

Inviato: 16 dic 2007, 19:44
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)?

Inviato: 16 dic 2007, 21:00
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

Inviato: 17 dic 2007, 13:44
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){...}.

Inviato: 17 dic 2007, 19:15
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?

Inviato: 17 dic 2007, 21:12
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