2010-05-31 7 views
1

Je dois déplacer l'int un endroit vers la droite et le retournerdécalage circulaire c

En Java je peux juste retourner n >> 1;

Est-ce possible en C?

La méthode que nous avons donné est la suivante

// Return n after a right circular 1-bit shift 
unsigned int right_circular_shift_1(unsigned int n) { 
+5

Ni en C ni en Java est '>>' un décalage circulaire. –

+1

Cette solution semble fonctionner. Votre devoir est maintenant de le déchiffrer: '((n >> 1) | (((n & 1) + (((entier non signé) -1) >> 1)) & ~ (((unsigned int) -1) >> 1))) 'xD –

+0

ce n'était pas les devoirs, c'est la révision pour un examen: D je l'ai eu à travailler à la fin, merci pour l'aide tout le monde – simion

Répondre

10

C n'a pas de décalage circulaire, donc je suppose que l'exercice est de mettre en œuvre. La façon de le faire pour un changement circulaire gauche est:

- get the current leftmost bit and save it 
- shift the number leftwards by one 
- or the saved bit in at the rightmost bit position 

Pour un décalage circulaire à droite:

- get the current rightmost bit and save it 
- shift the number rightwards by one 
- or the saved bit in at the leftmost bit position 
+0

Sauf que c'est le mauvais sens. L'OP voulait un virage circulaire à DROITE (s'il voulait un virage circulaire ...), c'est-à-dire saisir le bit du bas, passer à droite, ou dans le bit du bas précédent en haut. – Julian

+0

@Julian True - J'ai modifié ma réponse. –

+0

La partie délicate restante consiste à obtenir la position du bit le plus à gauche. J'ai montré un moyen, mais j'ai ensuite vu ses devoirs et ainsi supprimé ma réponse :) –

5

Avez-vous pas essayé?

n >> 1 

Cela fonctionnera en C (et d'autres langages basés sur C) comme il le fait en Java (pas circulaire, cependant).

+1

Je serais intéressé de savoir pourquoi cela a été downvoted. Le PO n'a montré aucune preuve qu'ils avaient essayé avant de demander si c'était possible; indépendamment du fait qu'il soit circulaire. En outre, ils déclarent: «Je dois déplacer l'int un endroit vers la droite et le retourner» – Johnsyweb

+2

Je pense que cela mérite un upvote, mec! –