_rotr8, _rotr16
Section spécifique à Microsoft
Faire pivoter les valeurs d'entrée vers la droite pour le bit le moins significatif (LSB) d'un nombre spécifié de positions de bits.
Syntaxe
unsigned char _rotr8(
unsigned char value,
unsigned char shift
);
unsigned short _rotr16(
unsigned short value,
unsigned char shift
);
Paramètres
valeur
[in] Valeur à faire pivoter.
shift
[in] Nombre de bits à faire pivoter.
Valeur retournée
Valeur ayant fait l'objet d'une rotation.
Spécifications
Intrinsic | Architecture |
---|---|
_rotr8 |
x86, ARM, x64, ARM64 |
_rotr16 |
x86, ARM, x64, ARM64 |
Fichier<d’en-tête intrin.h>
Notes
Contrairement à une opération de décalage droit, lors de l’exécution d’une rotation droite, les bits de bas ordre qui tombent hors du bas de gamme sont déplacés dans les positions de bits de haut ordre.
Exemple
// rotr.cpp
#include <stdio.h>
#include <intrin.h>
#pragma intrinsic(_rotr8, _rotr16)
int main()
{
unsigned char c = 'A', c1, c2;
for (int i = 0; i < 8; i++)
{
printf_s("Rotating 0x%x right by %d bits gives 0x%x\n", c,
i, _rotr8(c, i));
}
unsigned short s = 0x12;
int nBit = 10;
printf_s("Rotating unsigned short 0x%x right by %d bits "
"gives 0x%x\n",
s, nBit, _rotr16(s, nBit));
}
Rotating 0x41 right by 0 bits gives 0x41
Rotating 0x41 right by 1 bits gives 0xa0
Rotating 0x41 right by 2 bits gives 0x50
Rotating 0x41 right by 3 bits gives 0x28
Rotating 0x41 right by 4 bits gives 0x14
Rotating 0x41 right by 5 bits gives 0xa
Rotating 0x41 right by 6 bits gives 0x5
Rotating 0x41 right by 7 bits gives 0x82
Rotating unsigned short 0x12 right by 10 bits gives 0x480
FIN de la section spécifique à Microsoft