Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All
Expand Minimize
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here.

_rotr8, _rotr16

Microsoft Specific

Rotate the input values to the right to the least significant bit (LSB) by a specified number of bit positions.

unsigned char _rotr8( 
   unsigned char value, 
   unsigned char shift 
unsigned short _rotr16( 
   unsigned short value, 
   unsigned char shift 


[in] value

The value to rotate.

[in] shift

The number of bits to rotate.

The rotated value.

Intrinsic Architecture


x86, IPF, x64


x86, IPF, x64

Header file <intrin.h>

Unlike a right-shift operation, when executing a right rotation, the low order bits that fall off the low end are moved into the high order bit positions.

// 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

Community Additions

© 2015 Microsoft