programma su shift circolare
programma su shift circolare
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)?
per long
non sono sicurissimo che funzioni
Codice: Seleziona tutto
m=sizeof(long)*8-n
x=a<<n
y=(a-x>>n)>>m
return x+y
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
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
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){...}.
int circular_shift (int a,int n){...}.
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]
[tex]\frac1{\sqrt2}\bigl(\left|\text{loves me}\right\rangle+\left|\text{loves me not}\right\rangle\bigr)[/tex]
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
"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