Supposons que j'ai un tableau
unsigned char arr[]= {0,1,2,3,4,5,6,7,8,9};
6 Réponses :
Si vous êtes la seule personne avec un pointeur sur le tableau, incrémentez simplement le pointeur et décrémentez la longueur. P>
N'oubliez pas de garder le pointeur d'origine pour le moment où vous le libérez. P>
Tant que le tableau est modifiable, vous pouvez utiliser MemMove pour les déplacer (mais n'utilisez pas à tort memcpy comme MemCy n'est pas destiné aux régions qui se chevauchent): (taille de ARR) - Tailleof (* Ar) est la taille des octets de tous les éléments sauf 1 de la matrice). P> P>
Cela perd complètement la valeur de arr [0] code> - Pour un décalage circulaire, vous devez enregistrer cette valeur et le stocker dans le dernier élément après le Memmove code>.
Je me demande si vous devriez peut-être utiliser un STD :: Valarray. P>
Si vous voulez un décalage circulaire des éléments: ... fera le tour. Vous aurez besoin de #incluez l'en-tête d'algorithme. P> p>
Si vous voulez vraiment que la vitesse flamboyante, regardez le décalage de l'assembleur avec des opérations de transport. http://fr.wikibooks.org/wiki/x86_assembly/shift_and_rotate#shift_with_carry_instructions Couplé avec une boucle que vous pouvez bit-shirt un tableau en millisecondes. P>
Si vous recherchez une solution pure C, voici, y compris un programme de pilotes. Il s'avère assez simple: tournez par Cela nécessite un élément de stockage supplémentaire (pour l'inversion). p> n code>, vous:
N code> éléments in-place, Li>
Qu'essayez-vous d'accomplir, dupliquer le tableau?
Peut-être que c'est juste moi, mais je suis un peu incertain - Voulez-vous changer de bitwise chaque élément dans la matrice ou sur la circulaire de l'ensemble de la matrice?
Vous déplaçez les éléments le tableau, c'est-à-dire Array [0] = arr [1], etc., ou êtes-vous bossez-vous chaque élément de la matrice, c'est-à-dire Arr [0] = arr [0] << 2? Si le premier, supprimez l'étiquette "Bitwise".
@Andy: essayer d'obtenir un changement circulaire